Pemrograman · Bahasa pemrograman
Tutorial Ruby untuk pemula
Jawaban singkat
Ruby adalah bahasa scripting dinamis berorientasi objek yang dirancang agar menyenangkan dibaca dan ditulis. Simpan puts "Hello, world" di hello.rb lalu jalankan ruby hello.rb. Semua di Ruby adalah objek, bahkan angka dan nil. Konsep intinya: method yang dibuat dengan def, array dan hash, block yang dikirim ke iterator seperti each dan map, class dan module, serta exception yang ditangani dengan begin/rescue.
Apa itu Ruby dan untuk apa dipakai
Ruby dibuat oleh Yukihiro Matsumoto ("Matz") di Jepang dan pertama kali dirilis pada 1995, dengan tujuan membuat programmer bahagia. Ruby dikenal luas lewat Ruby on Rails, framework web di balik situs seperti GitHub dan Shopify. Ruby dipakai untuk aplikasi web, scripting dan otomatisasi, serta tool developer seperti Homebrew dan CocoaPods. Implementasi standarnya adalah CRuby (juga disebut MRI).
Instal Ruby dan jalankan Hello, world
macOS dan banyak sistem Linux sudah menyertakan Ruby, tetapi sering kali versinya lama; instal Ruby 3 terkini dengan version manager seperti rbenv, asdf, atau mise, atau dengan RubyInstaller di Windows. Periksa dengan ruby -v.
puts "Hello, world"ruby hello.rb
# Hello, world
irb # interactive Ruby shellputs mencetak nilai diikuti baris baru. Tanda kurung di sekitar argumen method bersifat opsional bila maknanya jelas.
Variabel dan tipe data dasar
Variabel tidak perlu dideklarasikan dan dapat menampung objek apa pun. Secara konvensi, nama memakai snake_case. Konstanta diawali huruf kapital.
| Class | Contoh | Catatan |
|---|---|---|
Integer | 42, 2**100 | Ukuran berapa pun |
Float | 3.14 | Presisi ganda |
String | "hi #{name}", 'hi' | Mutable; tanda kutip ganda melakukan interpolasi |
Symbol | :name | Identifier immutable, umum sebagai key hash |
true, false | true | Hanya false dan nil yang bernilai falsy |
NilClass | nil | Tanpa nilai |
Array, Hash | [1, 2], {a: 1} | Collection bawaan |
name = "Ada"
count = 7
puts "#{name} has #{count} items" # Ada has 7 items
puts count / 2, count / 2.0 # 3, then 3.5
puts "12".to_i + 1 # 13
puts 5.class, nil.to_a.inspect # Integer, then []
puts 0 ? "0 is truthy" : "falsy" # 0 is truthyAlur kontrol
score = 72
if score >= 90
puts "A"
elsif score >= 70
puts "B" # B
else
puts "C"
end
puts "pass" unless score < 50 # statement modifier
3.times { |i| print i, " " } # 0 1 2
puts
n = 10
n /= 2 while n > 1
puts n # 1
kind = case "SAT"
when "SAT", "SUN" then "weekend"
else "weekday"
end
puts kind # weekendBlok diakhiri end, bukan kurung kurawal. Kode Ruby biasanya diberi indentasi 2 spasi.
Method
Method mengembalikan nilai dari ekspresi terakhirnya, jadi return sering tidak diperlukan. Secara konvensi, method yang mengembalikan boolean berakhiran ?, dan method yang mengubah receiver di tempat berakhiran !.
def greet(name, greeting: "Hello")
"#{greeting}, #{name}!"
end
def total(*nums)
nums.sum
end
puts greet("Lin") # Hello, Lin!
puts greet("Lin", greeting: "Hi") # Hi, Lin!
puts total(1, 2, 3) # 6
puts 4.even?, "abc".upcase # true, then ABC
s = "hello"
s.upcase! # modifies s in place
puts s # HELLOArray dan hash
nums = [3, 1, 2]
nums << 5
p nums.sort, nums.first, nums.last # [1, 2, 3, 5] then 3 then 5
p nums.sort[1..2] # [2, 3]
ages = { "ann" => 31, "bob" => 25 }
ages["cy"] = 40
ages.each { |person, age| puts "#{person} is #{age}" }
p ages.fetch("zed", 0) # 0
user = { name: "Ann", city: "Oslo" } # symbol keys
p user[:name] # "Ann"p mencetak bentuk inspect dari suatu nilai, berguna untuk debugging karena menampilkan tanda kutip dan kurung.
Fitur khas: block dan iterator
Block adalah potongan kode yang dikirim ke sebuah method, ditulis dengan { ... } dalam satu baris atau do ... end di beberapa baris. Iterasi di Ruby sebagian besar dilakukan lewat block, bukan perulangan for, dan method Enumerable membuat transformasi data menjadi ringkas.
nums = [1, 2, 3, 4, 5]
p nums.map { |n| n * n } # [1, 4, 9, 16, 25]
p nums.select(&:even?) # [2, 4]
p nums.reduce(0) { |sum, n| sum + n } # 15
p nums.each_slice(2).to_a # [[1, 2], [3, 4], [5]]
p %w[pear fig apple].sort_by(&:length) # ["fig", "pear", "apple"]
def twice
yield
yield
end
twice { puts "hi" } # prints hi two times&:even? adalah singkatan dari { |n| n.even? }. Method buatan Anda dapat menerima block dan memanggilnya dengan yield.
Class dan module
module Greeter
def hello
"Hello from #{name}"
end
end
class Account
include Greeter # mix in module methods
attr_reader :name, :balance
def initialize(name)
@name = name # @ marks an instance variable
@balance = 0
end
def deposit(amount)
raise ArgumentError, "amount must be positive" unless amount.positive?
@balance += amount
self
end
def to_s = "#{name}: #{balance}"
end
acc = Account.new("Ann")
acc.deposit(30).deposit(20)
puts acc # Ann: 50
puts acc.hello # Hello from Annattr_reader menghasilkan method getter. Module mengelompokkan method yang dapat dicampurkan (mix in) ke banyak class, yang dipakai Ruby sebagai pengganti pewarisan ganda. Bentuk satu baris def to_s = ... membutuhkan Ruby 3.0 ke atas.
Penanganan error
def parse_age(text)
age = Integer(text) # raises ArgumentError on bad input
raise ArgumentError, "negative age" if age.negative?
age
end
begin
puts parse_age("41") # 41
puts parse_age("abc")
rescue ArgumentError => e
puts "error: #{e.message}" # error: invalid value for Integer(): "abc"
ensure
puts "done"
endrescue menangkap exception, dan ensure selalu dijalankan. Di dalam method Anda dapat menulis rescue langsung tanpa begin.
Program kecil yang lengkap: frekuensi kata
path = ARGV.fetch(0) { abort "usage: ruby words.rb FILE" }
begin
text = File.read(path).downcase
rescue Errno::ENOENT
abort "file not found: #{path}"
end
counts = text.scan(/[a-z']+/).tally
counts.max_by(5) { |_word, n| n }.each do |word, n|
puts format("%5d %s", n, word)
endJalankan dengan ruby words.rb notes.txt. tally menghitung item yang sama ke dalam hash, dan max_by(5) mengembalikan lima entri dengan jumlah tertinggi.
Kesalahan umum pemula
- Lupa
enduntuk menutup blokif,def,class, ataudo. - Mencampur key string dan key symbol:
h["name"]danh[:name]adalah key yang berbeda. - Memakai kutip tunggal dan mengharapkan interpolasi
#{}bekerja. - Memanggil method
!tanpa sadar bahwa objek aslinya berubah. - Memakai Ruby sistem yang lama alih-alih versi terkini yang diinstal dengan version manager.
Langkah selanjutnya
Mulailah dari halaman dokumentasi di ruby-lang.org, termasuk panduan cepat "Ruby in Twenty Minutes", dan gunakan docs.ruby-lang.org untuk referensi pustaka inti dan standar. Pelajari Bundler dan gem untuk dependensi, RSpec atau Minitest untuk tes, lalu Ruby on Rails bila Anda ingin membangun aplikasi web.
FAQ
Apakah Ruby masih dipakai?
Ya. Ruby on Rails menjalankan banyak produk web mapan, termasuk GitHub dan Shopify, dan Ruby umum untuk scripting dan tool developer. Untuk proyek baru ia kurang umum dibanding Python atau JavaScript, tetapi tetap aktif dikembangkan.
Apa perbedaan Ruby dan Ruby on Rails?
Ruby adalah bahasa pemrogramannya. Rails adalah framework web yang ditulis dalam Ruby dan menyediakan routing, akses database, dan template halaman.
Apa itu symbol di Ruby?
Symbol seperti :name adalah identifier unik yang immutable. Symbol yang sama selalu merupakan objek yang sama, sehingga efisien untuk key hash dan nama opsi.
Ruby atau Python untuk pemula?
Keduanya bahasa pertama yang bagus dengan sintaks mudah dibaca. Python punya jangkauan kegunaan lebih luas, terutama di data science; Ruby sangat ekspresif dan kuat untuk pengembangan web dengan Rails.