magicoAvatar border
TS
magico
Belajar Ruby yuk
Berhubung Java ane mentok, ane refreshing dulu de bikin thread ruby disini..
Ruby itu adalah language yang pure Object Oriented. Tidak ada primitives di Ruby. Dari mulai definisi sampai operator seluruhnya adalah object.
Ruby adalah strong typed language. Artinya Ruby memiliki tipe data yang baku. Contoh:

Code:

a = "test" #-> string
a = 123 #-> berubah integer
a = (1..4) #-> berubah range
a = a.to_a #->berubah array

Masing masing memiliki method sendiri sendiri.

Kemudian Ruby adalah convention over configuration. Artinya Ruby mengutamakan konvensi penulisan. Misalnya dalam penulisan variable:
Code:

$global #-> global variable
@instance #-> instance variable
@@class #-> class variable
lokal #-> local variable
CONSTANT # -> Constants
Class #-> Constant names
:symbol #-> symbol

Class variable bisa diakses classwide beserta seluruh instance instancenya. Misalnya kita memiliki 3 instances, dan kita memiliki sebuah variable @@counter pada class, maka ketiga instances itu bisa mengakses variable @@counter yang sama.

Kemudian untuk data type, ruby mengenal beberapa data type basic dibawah ini:
Code:

a="1"
a.class #-> String
a.to_i
a #-> 1
a.class #-> Fixnum
/[,\[\]]/.class #-> Regexp
123.45.class #-> Float
:sym.class #-> Symbol
(1..4) #-> range
[1..4] #-> array
{:kaskus => "www.kaskus.co.id", :google => "www.google.com"} #-> Hash
a=<<MAKANAN
Daftar Makanan
1. Es Krim
2. Donat
3. Nasi goreng
MAKANAN
a #-> "Daftar Makanan
1. Es Krim
2. Donat
3. Nasi goreng

a.class #-> String

Seluruhnya adalah object pada Ruby. Jadi kita bisa melihat turunan dari apa data type tersebut dengan menggunakan class method. Jadi Ruby mengenal data type berupa String, Fixnum (Integer, tetapi pada 64 bit Linux menjadi Long), Bignum, Float, Symbol, range, array, Hash, dan RegExp.

Selain itu, apapun yang kita berikan pada Ruby, akan selalu dianggap sebagai instance baru. Contoh berikut, akan memberikan 2 buah String instances
Code:

irb> "hastalavista beibeh".object_id
32564740
irb> "hastalavista beibeh".object_id
32577260


Control Structures
Ada beberapa control structure, yang cukup standard yang dimiliki Ruby:
Yang pertama adalah if-elsif-else dan unless
Code:

a=5
if a==4 then b="ok" else b="no" end

unless adalah negation dari if
Code:

unless a==4
b="no"
end

Tidak ada else untuk unless

Cara penulisan tersebut bisa juga dirubah menjadi
Code:

b="ok" if a==4

atau
Code:

b="no" unless a==4


Selain itu juga ada short-if expression seperti biasa yaitu
Code:

b=(a==4 ? "ok" : "no")


Berikutnya adalah case
Code:

case
when a < 5 then "fail"
when a == 5 then "barely pass"
when a > 5 then "pass"
end

Atau cara kedua adalah
Code:

case a
when 0..4 then "fail"
when 5 then "barely pass"
when 6..7 then "ok"
when 8..9 then "good"
when 10 then "perfect!"
else "huh?"
end

Seperti ane bilang, Ruby adalah pure OO, maka case disini juga adalah object yang berarti passable. Contoh
Code:

result = case a
when 0..4 then "fail"
when 5 then "barely pass"
when 6..7 then "ok"
when 8..9 then "good"
when 10 then "perfect!"
else "huh?"
end

atau dikirim ke method
Code:

puts case a
when 0..4 then "fail"
when 5 then "barely pass"
when 6..7 then "ok"
when 8..9 then "good"
when 10 then "perfect!"
else "huh?"
end


Berikutnya adalah while dan until
Code:

while a<10
a++
end
until a>=10
a++
end

cara tersebut juga bisa ditulis
Code:

a++ while a<10
a++ until a>=10


Lanjutan control structure, masih berupa loop
Oh.. satu lagi.. ane lupa.. pada while, until, bisa dilakukan block pada statement tersebut misalnya
Code:

a++ until a>=10

bisa juga menjadi
Code:

begin
a++
end until a>=10


Kemudian ada juga for loop.. syntaxnya adalah for .. in ..
Code:

for a in (0..5)
puts a
end

Cara ini tetap menggunakan class Fixnum, tetapi cara yang lebih ane sukai adalah menggunakan method times pada Fixnum.
Code:

5.times do |i| puts i end

atau bisa juga pengganti dari do adalah
Code:

5.times { |i|
puts i
}

Kalau pada array, bisa juga digunakan method each
Code:

a=%w(juragan bakso)
a.each { |i|
puts "ini #{i}"
}

hasilnya adalah
Code:

ini juragan
ini bakso


Pada loop, juga tersedia control keyword break, next, redo dan retry. break berfungsi untuk menghentikan inner most loop, dan next berfungsi untuk melanjutkan loop pada value berikutnya. Sedangkan redo untuk mengulang sebuah loop tersebut. Contoh
Code:

m=false
10.times { |i|
next if i < 3
break if i > 8
puts "ini #{i}"
unless m || i != 6
m=true
redo
end
}

hasilnya adalah:
Code:

ini 3
ini 4
ini 5
ini 6
ini 6
ini 7
ini 8

Perhatikan pada "ini 6" diulang 2 kali karena ane menyuruh dia untuk redo.
Berhati hatilah dengan redo, karena salah logic bisa menyebabkan infinite loop.

kemudian retry berfungsi untuk mengulang struktur tersebut. Bisa dilakukan pada loop, tetapi biasa berguna dalam exception trapping. Contoh
Code:

a=0
b=5.0
begin
c=b/a
rescue error1
puts "ERROR1"
rescue error2
puts "ERROR2"
rescue ZeroDivisionError
a=2
retry
ensure
puts c
end

Maka kalau terjadi error1 dan error2, kontrol akan pindah ke rescue, melakukan puts "ERROR1" atau puts "ERROR2", dan akan mengeksekusi "puts c". Tetapi bila terjadi ZeroDivisionError, maka program akan merubah angka a menjadi 2 dan mencoba kembali melakukan c=b/a.

EDIT1: Tambahin Control Blocks
EDIT2: Kelupaan Regexp data type
nona212
nona212 memberi reputasi
1
42.9K
641
GuestAvatar border
Guest
Tulis komentar menarik atau mention replykgpt untuk ngobrol seru
Mari bergabung, dapatkan informasi dan teman baru!
Programmer Forum
Programmer ForumKASKUS Official
20.2KThread4.2KAnggota
Terlama
GuestAvatar border
Guest
Tulis komentar menarik atau mention replykgpt untuk ngobrol seru
Ikuti KASKUS di
© 2023 KASKUS, PT Darta Media Indonesia. All rights reserved.