cv.cm

Pemrograman · Bahasa pemrograman

Tutorial Ruby untuk pemula

5 menit baca

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.

Buka Penguji regex

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 shell

puts 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.

ClassContohCatatan
Integer42, 2**100Ukuran berapa pun
Float3.14Presisi ganda
String"hi #{name}", 'hi'Mutable; tanda kutip ganda melakukan interpolasi
Symbol:nameIdentifier immutable, umum sebagai key hash
true, falsetrueHanya false dan nil yang bernilai falsy
NilClassnilTanpa 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 truthy

Alur 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                        # weekend

Blok 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             # HELLO

Array 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 Ann

attr_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"
end

rescue 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)
end

Jalankan 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 end untuk menutup blok if, def, class, atau do.
  • Mencampur key string dan key symbol: h["name"] dan h[: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.

Semua tutorial pemrograman