tugas akhir alpro
TRANSCRIPT
Lembar Kerja Praktikum 1: Pengenalan
Ruby adalah bahasa pemrograman scripting yang dinamis dan objectoriented, semua data di Ruby
adalah instance dari sebuah class.
Ruby dikembangkan pertamakali oleh Yukihiro Matsumoto ('Matz') pada tahun 1995. Sudah beberapa
tahun belakangan ini Ruby dipakai untuk mengembangkan aplikasi web yang komersial maupun
nonkomersial. library Ruby untuk aplikasi berbasis GUI nonweb juga tersedia.
Menjalankan Ruby
Menggunakan file skrip
Berikut ini file salam.rb, mencetak salam diakhiri baris baru
puts "assalamu'alaikum"
dieksekusi dengan interpreter ruby:
bash$ ruby salam.rb
Satusatunya statemen pada program tersebut memanggil method puts, yang mencetak
objek ke standardoutput (stdout) dan diakhiri dengan baris baru.
Menggunakan command line
bash$ ruby e “puts \”assalamu'alaikum\””
Secara Interaktif
bash$ irb
irb(main):001:0> puts "assalamu'alaikum"
assalamu'alaikum
=> nil
Struktur Program Ruby
File program atau skrip
Program Ruby adalah file teks dengan encoding ASCII 7 bit, yang dapat dibuat dengan
text editor yang biasa anda digunakan.
Nama file program Ruby biasanya diakhiri dengan '.rb', ini bukan keharusan, hanya
kebiasaan umum. Nama file yang sah pada file sistem dapat digunakan sebagai nama file
program (walau demikian, bukan ide yang baik menamakan file program anda '~@~.rb')
Sebuah file program dapat dieksekusi dari shell secara langsung tanpa menuliskan
interpreter
ruby, dengan menambahkan baris khusus di awal program, baris ini harus mengacu ke path
ruby interpreter, berikut ini file halo1.rb sebagai contoh:
#!/usr/local/bin/rubyputs 'Halo Ruby !'
Ubah file tersebut sehingga executable, dan eksekusi di shell (perhatikan ./ di baris kedua):
bash$ chmod 755 halo1.rb
bash$ ./halo1.rb
Beberapa option di interpreter juga dapat dituliskan, misalnya w untuk warning:
#!/usr/local/bin/ruby wwhile gets.chop
if /ruby/i puts 'ya, anda ketik '+ $_ + ' ...' end
end
anda akan mendapat warning karena penggunaan variabel khusus $_ tidak disarankan lagi.
Ruby juga mengenal baris khusus yang opsional untuk mengakhiri program, yaitu baris
yang hanya berisi keyword __END__ yang tidak diawali dan diakhiri whitespace.
brisbaris apapun setelah baris ini tidak akan dieksekusi oleh interpreter.
Statement
Program Ruby adalah lineoriented, terdiri dari statement yang diakhiri cukup dengan akhir
baris (endofline), tidak perlu karakter khusus (semisal titik koma) untuk menandai akhir
statement.
Ruby juga tidak memperlakukan karakter indentasi (tab) atau spasi secara istimewa untuk
awal statement, contoh:
puts 'ini baris pertama'puts 'ini yang kedua'puts 'dan ini yang terakhir'
Sebuah statemen dapat ditulis dalam beberapa baris, contoh:
# statemen dapat multilineputs 'ruby adalah bahasa pemrograman yang dinamik dan object oriented dikembangkan pertama kali oleh Yukihiro Matsumoto, a.k.a \'Matz\''# multiline memudahkan penulisan q uery yg panjangq uery = 'select p.nama, p.stok, s.nama from produk p, supplier sp.idsup = s.id and p.stok > 100order by p.namalimit 10 offset 21'
puts q uery
beberapa statemen ditulis satu baris jika dipisahkan oleh titik koma, contoh:
p=10; l=20; t=15; volume=p*l*t; puts "volume #{volume}"
Komentar
Seperti sudah anda lihat pada contohcontoh sebelumnya, Ruby menggunakan '#' sebagai
penanda awal komentar, dan setiap baris komentar harus diawali dengan '#'.
Khusus untuk baris pertama, jika '#' diikuti dengan '!' maka baris ini digunakan untuk
mengeksekusi interpreter jika program dijalankan langsung dari commandline.
Class
Sebagai bahasa objectoriented, data Ruby adalah instance dari suatu class. Class
merepresentasikan sebuah konsep yang meliputi struktur data dan operasioperasi yang
berasosiasi dengan struktur data tersebut.
Class memberikan sebuah namespace tersendiri bagi operasioperasi dan variabelvariabel di
dalam class tersebut.
Semua class yang didefinisikan dalam Ruby memiliki satu class induk yaitu class Object.
Sebuah class biasanya didefinisikan dalam satu file tersendiri, walau tidak ada keharusan
seperti itu.
Nama class biasanya diawali dengan huruf kapital. Selanjutnya class akan dibahas di
bagian tersendiri.
Module
Module adalah sebuah cara mengumpulkan classclass, methodmethod dan konstanta
konstanta dalam sebuah namespace.
Module memudahkan pemakaian bersama dan berulang berbagai konsep tersebut (class,
method, konstanta).
Dengan adanya module, kemungkinan konflik nama (nameconflict atau namecollision)
dapat diminimalkan. Module akan dibahas lebih lengkap pada bagian tersendiri.
Lembar Kerja Pratikum 2: Tipe Data dan Ekspresi
Ruby mendukung berbagai tipe data dasar yaitu: numerik, string, range, array, hashes dan regular
expression. Semua data Ruby adalah objek atau instance dari suatu class.
1. Numerik
Numerik terdiri atas integer dan floating point.Integer dapat menampung jumlah digit yang
hampir tak terbatas (dibatasi oleh jumlah free memory di sistem). Integer pada range tertentu
adalah objek dari class FixNum dan pada range lainnya adalah dari class BigNum. Ruby
mendukung optional base indicator untuk penulisan literal integer:
Base Indicator Base Contoh
0 Octal 01234567
0d Desimal (default) 0d123456789
0x Hexadesimal 0x123456789abcdef
0b Binary 0b1110010010011
Penulisan numerik dapat menggunakan underscore (garis bawah) untuk memudahkan
pembacaan, contoh:
123_456_789 => 1234567890b111_101_101 => 0b111101101
Floating point ditulis menggunakan . (titik) untuk separator desimal bulat dan pecahan,
contoh:
0.12346789
3.14285714285714
Data numerik adalah objek sejati, sebagai contoh, dari data integer dapat dipanggil method
:
# representasi l11398634 dalam string hexadesimall11398634.to_s(16)
2. String
String dalam Ruby adalah sederetan bytes yang tiap bytenya terdiri dari 8bit. String literal
dinyatakan dalam kutip tunggal atau kutip ganda, contoh:
'Saya suka coding dengan Ruby..''Saya bilang \'Saya suka coding dengan Ruby..\' '“Saya bilang \”Saya suka coding dengan Ruby..\” ”
Pada string literal menggunakan kutip ganda, interpreter ruby akan melakukan interpolasi
ekspresi jika ekspresi ditulis dalam #{}, sehingga memudahkan anda menggabungkan (concat)
string dengan ekspresi:
“Luas lingkaran = #{22.0/7 * 14 * 14}”
String literal diatas bernilai 'Luas lingkaran = 588'.
Kutip ganda pada string literal juga menyebabkan interpreter Ruby akan mengevaluasi berbagai
karakter khusus (misal: control characters).
Ada 3 cara lain untuk mendefinisikan string literal: %q, %Q dan here documents. Prefix %q sama
dengan kutiptunggal dan %Q sama dengan kutipganda (menyebabkan interpolasi ekspresi),
keduanya menggunakan delimiter ! , / , { , (, <. dan [ .
Contoh:%q{select “index” from “table” where “column”='area'}%Q/select “type” from “object” where area > #{22.0/7 * 21 * 21}/
Literal dengan here documents menggunakan string pembatas, cocok untuk mendefinisikan
string literal yang panjang (misal: code javascript), yang mungkin memuat karakterkarakter
khusus pembatas string yang dikenal Ruby, contoh berikut menggunakan string pembatas
KODE_JAVASCRIPT:
js1 = <<KODE _JAVAS CR IPTwindow.onload = function () {
document.for m2.text5.onchange = function () {// prevent user from entering invalid customer code
};}KODE _JAVA SCR IP T
3. Nil
Ruby mengenal sebuah objek khusus untuk menyatakan ketiadaan yaitu nil, jadi nil bukanlah
'tidak ada objek'.
Berbeda dengan bahasa pemrograman seperti C dan Java, di dalam Ruby kita dapat langsung
mendefinisikan sebuah variable tanpa menentukan tipenya. Anda dapat mencobanya langsung melalui
irb3
$irb> a = 2
$irb> b = 2
$irb> a + b
$=> 4
Bukan hanya tipe data numeric, anda juga bisa membuat tipe data string secara langsung.
$irb> a = “hehe”
$irb> a.length
$=> 4
$irb> a.reverse
$=> “eheh”
$irb> a
$=> “hehe”
Di dalam ruby kita mengenal istilah symbol. Symbol ini akan sering sekali anda temui di dalam Rails.
Sering digunakan sebagai semacam konstanta pengganti string.
$irb> a = :test
$irb> a != :test
$=> false
$irb> a == :test
$=> true
Symbol ini bisa dibilang lebih hemat memori dibandingkan dengan String. Di dalam rails kita akan
sering menemukan symbol dalam sebuah pemanggilan method. Selain itu kita juga akan sering
menggunakan symbol sebagai sebuah key dalam hash. Kedua hal ini sering membuat bingung orang-
orang yang pertama kali mempelajari Ruby bersamaan dengan Rails.
Lembar kerja Praktikum 3: Kondisi
1. If ... then ... end
Ruby mengenal ekspresi conditional if..then..end untuk mengevaluasi satu kondisi dan
if..then..elsif..then..else..end untuk lebih dari satu kondisi. Contoh:
1. ditebak = 1232. tebakan = gets.chop.to_i3. if tebakan > ditebak4. puts 'terlalu besar'5. elsif tebakan < ditebak6. puts 'terlalu kecil'78. puts 'pas benar ...'
Penjelasan: baris 2 menggunakan method gets yang mengambil input dari stdin, input diterima
sebagai string dan menyertakan karakter endofline, agar dapat dibandingkan secara benar terhadap
data numerik di variabel ditebak maka karakter endofline harus dipotong (=chopped) dari input
ini, dan hasilnya diparse ke integer dengan method to_i .
Sebagai kebalikannya dapat juga digunakan ekspres unless..then..else..end, contoh
sebelumnya ditulis menggunakan unless:
1. ditebak = 1232. tebak = gets.chop.to_i3. unless tebak == ditebak then4. unless tebak < ditebak then5. puts 'terlalu besar'6. else78. end9. else10. puts 'pas benar'11. end
2. Conditional Ternary
Ruby juga mengenal ekspresi ternary, bentuknya:
expr0 ? expr1 : expr2
Jika expr0 bernilai true maka dikembalikan expr1, jika salah dikembalikan expr2. Ternary
memungkinkan ekpresi nested, contoh:
bil = 123; print 'tebaklah:'; tebak = gets.chop.to_i puts tebak == bil ? 'benar..': tebak > bil ? 'kebesaran': 'kekecilan'
Lembar Praktikum 4: Pengulangan
Loop mengenal while..end untuk mengeksekusi statemenstatemen dalam loop selama kondisi
yang dievaluasi pada bagian while adalah true. Program berikut ini akan terus meminta input selama
tebakan yang masuk belum benar:
1. ditebak = 1232. print 'tebak:'3. tebakan = gets.chop.to_i4. while ditebak != tebakan5. if ditebak < tebakan then6. puts 'terlalu besar'78. puts 'terlalu kecil'9. end10. print 'tebak lagi:'11. tebakan = gets.chop.to_i12.end13.puts 'benar sekali !'
Baris 4 sampai dengan 11 akan dieksekusi selama tebakan belum benar.
Kebalikan dari while adalah until, yang terus mengulang statemen dalam loop sampai kondisi yang
dievaluasi adalah true. Contoh:
1. ditebak = 1232. print 'tebak:'3. tebakan = gets.chop.to_i4. until ditebak == tebakan5. # sama dengan sebelumnya6. end7
Lembar Kerja Praktikum 5: Array dan Hash
Array dan Hash adalah objek yang merupakan koleksi data secara terindeks (indexed). Array diindeks
dengan key integer, Hash diindeks menggunakan sembarang objek sebagaikey.
Array dan hash dapat berisi elemenelemen yang berbeda tipe datanya. Array dapat didefinisikan
secara literal, dengan menggunakan operator kurung siku berisi elemenelemen array, contoh:
a1 = [1,'senin',2,'selasa',3,'rabu',4, 'kamis',5,'jumat']
Mengakses array a1 menggunakan key integer:
puts a1[0] # 1puts a1[1] # 'senin'puts a1[2] # 2
Array dapat berisi array lain, membentuk array multidimensi:
a2 = [['a','b','c'],['d','e','f'],['g','hihi','i']]# mengaksesputs a2[2][1] # 'hihi'
Hash didefinisikan menggunakan kurawal {}, contoh:
produk1 = {'p001' => 'Susu Sapi', 'p002'=> 'Telur Ayam', 'p003'=> 'Gula Pasir'}puts produk1['p002'] # 'Telur Ayam'# nested hashproduk2 = {'p001' => { 'nama' => 'Susu Sapi', 'harga' => 10000 },'p002' => { 'nama' => 'Telur Ayam','harga' => 12000 },'p003' => {'nama' => 'Gula Pasir', 'harga' => 6000 }
}
puts produk2['p003']['harga'] # 6000
Elemen hash yang belum didefinisikan keynya bernilai nil. Tapi, hash di Ruby dapat diset nilai
defaultnya. Misal, mendefinisikan variabel hash untuk menghitung sesuatu yang diindeks dengan
nama, defaultnya 100:
hitung1 = Hash.new(100)puts hitung1['p001'] # 100
Lembar Kerja Praktikum 6 : Method
Sebuah method dideklarasikan dengan menggunakan keyword def dan diakhiri dengan end. Sebagai
contoh buatlah file baru coba4.rb
def coba_method(name)
puts "coba #{name}"
end
a = "Jaya!"
coba_method(a)
coba_method("Dunks!")
Ketika dieksekusi program diatas akan mengahasilkan output sebagai berikut:
coba Jaya!
coba Dunks!
Untuk me-return sebuah nilai kita hanya perlu menuliskan nilai (atau variable) tersebut di dalam
method.
def kali_dua(nilai_awal)
kali_dua = nilai_awal * 2
kali_dua
end
kali_dua = kali_dua(4)
puts "kali dua #{kali_dua}"
Hasil eksekusi dari program ini adalah:
kali dua 8
Sebenarnya bisa saja kita menggunakan keyword return untuk mereturn sebuah nilai dari method.
Namun, di sini saya hanya ingin menunjukkan alternatif dari cara tersebut.
Lembar Kerja Praktikum 7 : Classes
Deklarasi sebuah kelas dimulai dengan class dan diakhiri dengan end. Sebagai contoh kita akan
membuat sebuah kelas Mahasiswa pada file mahasiswa.rb
class Mahasiswa
def initialize(nama, npm)
@nama = nama
@npm = npm
end
def cetak_info
puts "Nama: #{@nama}"
puts "NPM: #{@npm}"
end
end
Instance variable dari sebuah kelas dideklarasikan dengan ‘@’ yang akan membuatnya bisa diakses
oleh semua instance method yang ada di kelas tersebut. Namun instance variable tersebut tidak akan
bisa diakses dari luar kelas. Untuk bisa melakukan itu kita perlu membuat accessor method
def nama=(nama_baru)
@nama = nama_baru
end
def nama
@nama
end
Anda bisa menguji method ini dengan melakukan pemanggilan method seperti dibawah ini:
mhs = Mahasiswa.new("Si Bocung","1203000439")
mhs.cetak_info
mhs.nama = "Si Bocah" # mengubah nama menjadi Si Bocah
mhs.cetak_info
nama = mhs.nama # method ini akan mereturn Si Bocah sebagai nama
puts nama
Namun untuk mendefinisikan method setter dan getter bagi setiap variable adalah pekerjaan yang
melelahkan. Oleh karena itu Ruby menyediakan method attr_accessor() untuk memudahkan kita.
class Mahasiswa
attr_accessor :npm
attr_accessor :nama
10
Selain accessor method ada lagi yang akan sering anda temukan di Rails, yaitu class method.
def self.whatami
puts “Saya Mahasiswa”
end
Method ini diakses dengan diawali oleh nama kelasnya.
Mahasiswa.whatami # akan mencetak Saya Mahasiswa
Ada banyak hal lain mengenai class namun tidak bisa di bahas dalam tutorial ini seluruhnya. Anda
bisa mempelajari hal-hal tersebut melalui link-link yang saya sediakan pada halaman selanjutnya.