--- In [email protected], Edwin Pratomo wrote:
> i == 1 and raise "error" rescue next nil
celingak celinguk - saya gak pernah tau ada sintaks rescue ruby begini :-/
yakin nih ini
ruby way??
afaik (dalam contoh lain tapi senada) begini:
Object.respond_to?("foo") => 1
(1)
if true
foo
end
(2)
foo if true
(3)
true && foo
nah kalo yang terakhir (3) memang ruby.
> tapi ini syntax error:
> foo = %w(foo bar baz).collect do |fn|
> fn = "#{fn}.txt"
> fh = File.open(fn, 'r') rescue next nil
> "content of #{fn}"
> end
>
> jika tidak ada assignment "fh = " maka jalan (tapi jadi tidak berguna
> karena fh mau dipake).
> pertanyaanya: kenapa jika ada assignment jadi error?
mustinya pertanyaan Panjenengan adalah apakah keluaran obyek File#open
berperilaku
boolean sebagaimana i == 1.
> bentuk yg lebih legal tentu saja bisa:
> foo = %w(foo bar baz).collect do |fn|
> fn = "#{fn}.txt"
> begin
> fh = File.open(fn, 'r')
> rescue
> next nil
> end
> "content of #{fn}"
> end
ini saya boleh dibilang cuma mimicking aja:
foo = %w(foo bar baz).map do |e|
begin
File.open("#{e}.txt") { |fh| "content of #{fh.readlines}" }
rescue Errno::ENOENT
nil
end
end
buat saya : Avoid too clever code - Readability is more important that brevity.
Anyway,
Dari keinginan Panjenengan return output tsb sebetulnya mungkin bisa dihias
dengan
pattern decorator bila saya sudah jelas apa yang ingin dicapai, karena saya
melihat
code2x diatas tsb masih kaku, iya jelek..
> tapi jelek, terlalu bertele2. (mungkin wajar2 saja buat orang PHP atau java
> yg udah biasa bertele2).
> ada cara utk menulis bentuk panjang ini jadi ringkas?
ngomong2 soal cara menulis yang suka nulis ringkas bahkan bila cryptic pun juga
tak apa
tuh orang perl deh. (buah php dengan java no comment nanti panjang tak ada guna)
> rgds,
> Edwin.
arie
http://ariekusumaatmaja.wordpress.com