Assalamu'alaikum wr. wb.
X-Posting ke id_python, id_ruby dan linux-programming
Steven Haryanto wrote:
> ikutan id-ruby yah "pak" (:-). biar bisa idup diskusinya.
> sejauh ini yang gue liat:
> - ruby ada banyak ambil unsur dari perl, tapi banyak juga ambil
> dari python. di readme/webpage-nya tertulis: ruby itu terutama
> smalltalk campur perl. fully OO tapi lebih "konvensional"/
> mainstream daripada smalltalk.
> - di perl prefiks variabel ($foo, @bar, %baz) menandakan jenis
> data. di ruby ada prefiks, tapi menandakan scope: $foo itu
> global, bar itu variabel lokal, @baz itu variabel class
> instance. ini menarik buat gue. meski sebetulnya gue lebih
> suka prefiks '.' (seperti di vb) untuk instance variable.
> var berawalan kapital juga adalah konstan di ruby.
Tambahan:
@ini adalah instance variable
@@itu adalah class variable
> karena ini cross-post ke python, gue bandingkan dg python aja
> ya:
> - ruby support threading. kayaknya ini lebih bagus daripada
> restriksi global interpreter lock-nya python.
> - pake garbage collector mark & sweep. di python 2 ada
> cyclegc, tapi ini masih berbasis ref counting.
> - sintaks list, dictionary sama
> - string sama2 bisa dislice per character, tapi gak ada
> restriksi immutable (CMIIW)
> - sama2 gak pake braces, tapi di ruby gak pake whitespace,
> melainkan : dan end.
Koreksi dikit cukup end saja, jadi kira-kira gini
class Person
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age.to_i
end
def inspect
"#@name (#@age)"
end
end
p1 = Person.new('elmo', 4)
p2 = Person.new('zoe', 7)
p1 # -> elmo (4)
p2 # -> zoe (7)
> - ruby belum ada byte compilation (hidup python! :-)
Tapi ada rb2c dan baru baca di comp.lang.ruby bisa interfacing
dengan delphi
> - bbrp hal yang dipinjam ruby dari python / mirip dg python:
> + integrated support arbitrary long integer (meski di ruby
> katanya lebih transparan, konversi long<->short otomatis)
> + reflection sama2 kuat
> + everything is an object
> + sama2 bisa invoke method dari literal (meski di python
> selain list/tuple dan string, belon ada method untuk
> literal lain ya...?)
> - di ruby ada singleton (method yang spesifik per object).
> kayaknya asik & convenient, tapi gue sendiri belon pernah
> pake (biasanya sih selalu subclass2 aja, soalnya gue belon
> pernah bikin yang rumit2 atau buat GUI app...)
> - di ruby type dan class itu sama. di python masih ada
> dikotomi -- guido sedang mikirin untuk nyatuin.
> - sama2 support mixin (tapi di ruby gak ada multiple
> inheritance)
> - secara rata2 katanya ruby lebih cepet dari python
> - overload operator lebih terlihat natural (but it
> depends). mo overload operator +?
> def +(...) ...
> bbrp lagi yang bisa disebutkan:
> - ada control structure case yang lebih generik
Ada juga unless yihuuuy
> - ada operator ! (faktorial)
Yang bener nih!?
> - API iteratornya lebih matang dari python
> - support regex integrated ke language -- perl
> - "" (interpolate) dan '' (noninterpolate) -- perl
> - ada visual display/debugging of regex, lucu juga
> yang laen2nya bisa dicek di halaman ruby vs python di
> www.ruby-lang.org
> yang belon gue cek. mungkin mas zakaria bisa confirm:
> - complex number?
Ada standard library Complex
> - apakah attribute bisa otomatis dijadikan property?
> (dibuatkan method getFoo() dan setFoo() agar kita
> bisa control akses ke attribute tsb)
Nggak perlu karena di ruby attribute itu tidak bisa diakses
dari luar secara langsung melainkan harus melalui method accessor.
Di ruby setter nya itu adalah method var=
Jadi kayak gini:
class Song
def duration=(newDuration)
@duration = newDuration
end
end
Terus juga ada syntatic sugarnya buat mempermudah buat method accessor
yaitu attr_reader, attr_writer dan attr_accessor
Jadi enak sekaliiiii seperti kata buku Programming Ruby:
In his landmark book Object-Oriented Software Construction ,
Bertrand Meyer calls this the Uniform Access Principle. By hiding
the difference between instance variables and calculated values,
you are shielding the rest of the world from the implementation of
your class. You're free to change how things work in the future
without impacting the millions of lines of code that use your class.
This is a big win.
> - magic methods lainnya: __foo__
> - destructor behaviour
Wah belum tahu juga nih, atau jangan-jangan nggak ada destructornya?
Tambahan lainnya:
Class definition di ruby itu sendiri adalah executable dan kita selalu
bisa mendefinisikan/redefinisikan class bahkan standard class.
Jadi bisa begini:
=======================================
class String
def sensor
self.gsub /[aiueo]/,'*'
end
end
'hidup ruby'.sensor # => "h*d*p r*by"
=======================================
Selain itu juga bagi para perl-er:
Truth value di ruby adalah selain nil atau false jadi 0 atau
zero length value itu masih dianggap true!.
> gue harapkan sih komunitas seperti python and ruby
> berkembang. jadi gak cuman php doang yang rame, tapi
> orang indo juga banyak tertarik dengan bahasa2 yang
> lebih 'real' & elegan seperti python & ruby.
> karena itu gue buat www.ruby-lang.or.id (hehehe, baru
> domain name doang guys).
> yang tertarik diskusi yang bareng kita di
> [EMAIL PROTECTED] . cara sub/unsub standar seperti
> milis yahoogroups lainnya.
Kalau mau belajar ruby silakan baca dulu
Programming Ruby
The Pragmatic Programmer's Guide
http://www.rubycentral.com/downloads/files/ProgrammingRuby-0.2.tgz
Kalo mau ruby download di http://www.ruby-lang.org
Di Mandrake ada RPM-nya, kalo untuk RedHat download SRPMS-nya
edit sedikit ruby.spec-nya dan compile RPM-nya.
Atau kalau ada yang mau nampung RPM-nya?
Wassallam,
-- Zakaria
Work: [EMAIL PROTECTED], http://asia-karsa.com
Private: [EMAIL PROTECTED] Yahoo!: z4k4ri4
http://pemula.linux.or.id
--
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3