Macam Tipe Data di ruby

Di dalam program ruby, angka, huruf, tanggal, dan hal yang lain adalah objek. Di dalam ruby terdapat beberapa macam tipe data mulai dari Number, String (Huruf), Array, nilai true/false dan tipe data yang hanya ada pada program ruby yaitu simbol dan hash

Tipe Data

Boolean

  • di dalam ruby tidak ada tipe boolean, tetapi secara default saat menjalankan ruby, akan ada 2 instance yang bernama true dan false
  • dimana true adalah instance dari TrueClass dan false adalah instance dari FalseClass
  • sesuatu dikategorikan sebagal false bila nilainya adalah false atau nil
  • angka nol (0), string yang kosong ("") dan segala yang ada isinya dikategorikan sebagai true
menikah = false
lulus = true

Integer

  • di dalam class integer terdapat 2 menjadi fixnum dan bignum
  • perbedaan antara fixnum dan bignum adalah dalam hal jumlah digit
  • maximum fixnum dapat dikatakan adalah 18 digit atau secara khusus nilai tertinggi dari fixnum adalah 4611686018427387903
  • bila lebih besar dari nilai diatas akan dimasukkan kategori bignum
  • secara praktek hampir jarang sekali menggunakan bignum, kecuali hanya untuk perhitungan yang bersifat science

Float

  • bila data berupa pecahan maka secara otomatis akan termasuk class Float
  • contoh data tipe float: 1.2 atau 1.0e3 artinya 1.0 x 10 pangkat 3

Strings

  • Berisi data kumpulan dari huruf / charakter
  • setiap data huruf merupakan instance dari class String.
  • di dalam class string terdapat ratusan method yang dapat membantu kita memanipulasi data.
  • dalam membuat data tipe string, data harus di apit petik satu(single quote) atau petik dua (double quote)
  • contoh: 'dono', "Yudy"
  • terdapat kode khusus, misalnya
    • \n = membuat baris baru
    • \t = tab
  • membuat string menggunakan double quote lebih di sarankan dalam program ruby karena memungkinkan teknik interpolasi, perhatikan contoh berikut:
lebar = 10
panjang = 2
puts "luasnya adalah #{panjang*lebar}"
  • pada contoh diatas kita dapat menyisipkan kode program ruby di dalam suatu string " .... "
  • interpolasi harus dalam format #{ ... kode program ruby ...}
  • berikut adalah contoh beberapa fungsi yang sering digunakan
kota = "Surabaya"
kota[0]               # hasil = S   , ambil huruf dengan urutan ke 0 , ingat tidak menggunakan titik
kota[4,3]             # hasil = bay , ambil mulai huruf ke 4 sebanyak 3 
kota[2..3]            # hasil = ra  , ambil huruf ke 2 sampai ke 3
kota["aba"]           # cek apa kata aba ada di string kota, bila tidak maka hasilnya nil
kota.length           # hasil = 8   , hitung banyak huruf
kota.downcase         # menjadi huruf kecil semua
kota.downcase!        # isi variabel kota akan berubah dari S yang huruf besar akan menjadi huruf kecil
" makan Roti   ".strip!.capitalize # strip = menghilangkan spasi, capitalize = jadi huruf besar
kota.count("a")       # menghitung huruf a ada berapa kali
kota.empty?           # cek apakah variabel kota ada isinya atau tidak
kota.include? "baya"  # cek apa mengandung kata baya, bila ya maka true
kota.index("aba")     # cek kata aba di posisi ke berapa
b = "nama saya joni" 
b.split               # akan menghasilkan array ["nama","saya","joni"]
b = "aa//bb//ccc" 
b.split("//")         # dipisah berdasarkan kode //
"10.5".to_f           # menjadi kan data tipe float
"100".to_i            # menjadi data tipe integer
"ha " * 3             # menjadi ha ha ha
"%05d" % 123          # 00123, d = desimal atau hanya boleh angka

  • untuk lebih detil dapat melihat daftar fungsi yang ada di ruby-doc

Symbol

  • Symbol bisa dibayangkan sebagai sesuatu "Objek yang Unik".
  • setiap symbol adalah instance dari class Symbol
  • semua symbol harus dibuat dalam format :nama_symbol, misalnya :nama, :alamat
  • setiap kali kita menulis suatu variabel bertipe simbol, maka sebenarnya komputer membuat objek baru, (selama menggunakan nama yang berbeda)
  • mirip seperti dalam penggunaan string, hanya saja dalam penggunaan memory komputer lebih efisien dan lebih cepat.
    • Penjelasannya:
    • setiap kali membuat simbol dengan nama berbeda maka akan memiliki objek_id yang berbeda
    • bila kita membandingkan suatu string "surabaya1" dengan "surabaya2", maka komputer akan membandingkan setiap huruf dari awal sampai belakang pada contoh ini berarti baru setelah proses ke 9, baru ketemu kalau kedua string tidak sama
    • bila kita membandingkan suatu simbol :surabaya1 dan :surabaya2, maka komputer hanya akan melakukan 1 proses saja yaitu membandingkan objeck_id milik :surabaya1 dan :surabaya2
  • symbol tidak pernah diisi suatu nilai, karena dia hanya suatu objek yang memiliki id yang dibedakan berdasarkan namanya, jadi bila kita tulis :nama = "yudi" akan muncul error.
  • sebenarnya kita bisa mengatakan bahwa isi dari suatu symbol adalah nama dari symbol itu sendiri, misalnya :monica, :christa, :johny , kita dapat mengatakan ada 3 objek symbol, bila ternyata ada orang lain lagi bernama monica, maka dia harus diberi nama monica yang berbeda misalnya :monica_wijaya, sehingga menunjuk pada objek yang berbeda.
  • berikut beberapa contoh penggunaan symbol
:yudi                   # membuat objek symbol dengan nama yudi
:kotak_merah            # membuat objek symbol dengan nama kotak_merah
:"kotak merah"          # membuat objek symbol dengan nama yang ada spasinya
:surabaya.to_s          # simbol dikonversi menjadi string
"surabaya".to_sym       # string dijadikan symbol

Array

  • adalah kumpulan dari variabel yang memiliki nama yang sama tapi bisa diisi banyak nilai yang dibedakan dari indexnya misalnya siswa[80,90,55]
    • Penjelasan
    • nama variabel adalah siswa
    • memiliki 3 nilai yaitu 80,90 dan 55
    • indexnya dimulai dari angka nol, jadi
    • siswa[0] berarti memiliki nilai 80,
    • siswa[1] berarti memiliki nilai 90,
    • siswa[2] berarti memiliki nilai 55
  • dalam satu array bisa memiliki isi yang berbeda tipe misalnya data1[1 , "abc"]
    • pada contoh ini jelas data1[0] bertipe angka, sedangkan data1[1] bertipe huruf
siswa = []                   # membuat array kosong bernama siswa
siswa = Array.new(3) {90}    # [90,90,90]
siswa = Array.new(3) {       # membuat array 2 dimensi 3 x 2 [[nil,nil], [nil,nil], [nil,nil]]
  Array.new(2)
}
siswa = %i[buka tutup]       # [:buka, :tutup]  , array of symbol
siswa = %w[beni siti andri]  # ["beni","siti","andri"]
siswa.size                   # 3   , artinya banyak elemen di dalam array
siswa.empty?                 # false , apakah isi array kosong
siswa.first                  # beni, elemen pertama
siswa << "joni"              # memasukkan joni sebagai siswa keempat dalam array siswa
[1,2] + [3,4]                # [1,2,3,4]   , menggabung 2 array dengan tanda plus
[1,2,3,2,7] - [2,3]          # [1,7] , menghapus elemen
[1,2,3].include? 2       # true, apakah angka 2 ad di dalam array
siswa.join "-"           # "beni-siti-andri", menggabung isi array dengan tanda -
[1,2,3].push 4           # [1,2,3,4], menyisipkan data di urutan belakang
[1,2,3,4].pop            # hasil = 4, array menjadi [1,2,3], artinya mengambil yang belakang
[1,2,3].unshift 0        # [0,1,2,3], menyisipkan elemen di bagian depan
[1,2,3].shift            # hasil = 1, array menjadi [2,3], artinya mengambil yang depan

# memanfaatkan array untuk membuat program FIFO / LIFO
# FIFO = First In First Out (siapa yang masuk pertama itu yang keluar pertama)
  # menggunakan push untuk memasukkan data
  # menggunakan shift untuk mengambil data
# LIFO = Last In First Out (siapa yang masuk terakhir akan keluar pertama)
  # menggunakan push untuk memasukkan data
  # menggunakan pop  untuk mengambil data 
  • beberapa fungsi berasal dari kumpulan method class Unemerable
[1,2,3].map { |v| v * 10}    # [10,20,30], setiap objek diambil dan diproses
[2,1,3].sort                 # [1,2,3]   , diurutkan
[1,2,3,4,5].select { |n| n.even? }   # [2,4]    , diambil yang yang sesuai syarat

Hash

  • hash adalah kumpulan data yang terdiri dari key and value.
    • jadi bisa dibayangkan 1 data ruby terdiri dari key and value
  • wujud dari hash menggunakan { ..}, kurung kurawal
  • contoh hash misalnya data1 = { :min => 0 , :max => 100 }
    • data1 = variabel tipe hash
    • di dalam data1 terdapat 2 data
    • :min dan :max, disebut key
    • angka 0 dan 100, disebut value
    • bentuk penulisan bisa disingkat data1 = { min: 0, max: 100}
    • arti tetap sama
data1 = {min: 0, max: 100}
data1.class                     # Hash
data1.size                      # 2     , 
data1[:min]                     # 0     , ambil nilai yang value / indexnya :min
data1["min"]                    # nil   , karena string "min" berbeda dengan symbol :min
data1[:tengah] = 50             # menambah elemen hash, sehingga isinya menjadi 3 :min, :max, :tengah
data1.keys              # [:min, :max], menampilkan daftar key
data1.values            # [0, 100], menampilkan daftar values
data1.has_key? :min     # true, apakah ada symbol :min
# looping hash
data1.each do |k,v|     # akan mencetak key dan values dari hash
  puts "#{k} = #{v}"
end
  • Dari contoh diatas hash dapat dibayangkan seperti array hanya indexnya berupa symbol

Range

  • bentuk data misalnya (1..7), berarti data range dari 1,2,3,4,5,6,7
(1..5)                    # 1,2,3,4,5
(1...5)                   # 1,2,3,4
('a'..'c')                # 'a','b','c'
(1..7).class              # Range
(1..7).include? 6         # true, karena 6 ada dalam range tersebut
(1..7) === 6              # true    , artinya bertanya apakah 6 ada dalam range
(1..7).begin              # 1
(1..7).end                # 7
(1..7).to_a               # [1,2,3,4,5,6,7]
(1..7).min                # 1
nilai = 10                # contoh menggunaan range dengan when
grade = case nilai
  when 0..45  then "E"
  when 46..55 then "D"
  when 56..69 then "C"
  when 70..79 then "B"
  when 80..100 then "A"
  else "nilai salah isi"
end