Klausa Penjaga
Return awal yang rapi.
Klausa Penjaga adalah pelajaran Ruby Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Ruby Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Ruby Academy mencakup 4 pelajaran total.
Pengembalian Awal yang Rapi
Klausa penjaga adalah pemeriksaan di bagian awal metode yang melakukan pengembalian lebih awal untuk kasus yang tidak valid atau kasus batas. Klausa ini menjaga logika utama tetap datar dan mudah dibaca.
def greet(name)
return "Hello, stranger" if name.nil?
"Hello, #{name}"
end
puts greet(nil)
puts greet("Ada")Masalahnya: Penyarangan yang Dalam
Tanpa penjaga, validasi menumpuk sebagai blok if yang saling bersarang. Pekerjaan sebenarnya akhirnya terkubur jauh di sisi kanan layar.
def charge(user)
if user
if user[:active]
puts "Charging #{user[:name]}"
end
end
end
charge({ name: "Sam", active: true })Solusinya: Klausa Penjaga
Balik setiap kondisi dan lakukan pengembalian lebih awal. Alur utama yang berhasil kini berada pada tingkat indentasi dasar, tanpa indentasi tambahan dan mudah terlihat.
def charge(user)
return unless user
return unless user[:active]
puts "Charging #{user[:name]}"
end
charge({ name: "Sam", active: true })return tanpa Nilai
return tanpa argumen keluar dari metode dan menghasilkan nil. Gunakan ini ketika pemanggil tidak memerlukan hasil untuk kasus yang ditolak.
def log(message)
return if message.nil? || message.empty?
puts "LOG: #{message}"
end
log("")
log("started")Mengembalikan Nilai
Penjaga juga dapat mengembalikan nilai yang bermakna, seperti nilai bawaan yang masuk akal, sehingga pemanggil selalu mendapatkan sesuatu yang dapat digunakan.
def discount(price)
return 0 if price <= 0
price * 0.1
end
puts discount(-5)
puts discount(200)Guard dengan unless
return unless condition terbaca sebagai “keluar jika persyaratan ini tidak terpenuhi”. Ini merupakan salah satu idiom Ruby yang paling umum.
def withdraw(balance, amount)
return "Insufficient funds" unless balance >= amount
"New balance: #{balance - amount}"
end
puts withdraw(100, 150)
puts withdraw(100, 40)Beberapa Penjaga
Susun beberapa penjaga untuk memvalidasi input satu per satu. Setiap baris menyatakan satu aturan, sehingga metode dapat menjelaskan dirinya sendiri.
def register(name, age)
return "Name required" if name.to_s.empty?
return "Must be 18+" if age < 18
"Registered #{name}"
end
puts register("", 30)
puts register("Lee", 16)
puts register("Lee", 21)Penjaga dengan next dalam Perulangan
Di dalam blok atau perulangan, Anda tidak dapat menggunakan return hanya untuk satu iterasi. Gunakan next sebagai penjaga untuk melewati item saat ini dan menuju item berikutnya.
[1, -2, 3, -4].each do |n|
next if n.negative?
puts n
endPenjaga Meningkatkan Keterbacaan
Bandingkan kedua gaya di bawah ini secara mental: penjaga menghapus else dan mengurangi indentasi. Pembaca melihat kasus yang tidak valid ditangani terlebih dahulu, kemudian logika inti.
def area(width, height)
return 0 unless width.positive? && height.positive?
width * height
end
puts area(0, 5)
puts area(4, 5)Menimbulkan Kesalahan dalam Penjaga
Ketika input yang buruk merupakan kesalahan pemrogram, bukan kasus yang diharapkan, timbulkan pengecualian dalam penjaga agar kegagalan terjadi dengan cepat dan jelas.
def sqrt(n)
raise ArgumentError, "n must be >= 0" if n.negative?
Math.sqrt(n)
end
puts sqrt(16)
puts sqrt(-1) rescue puts "caught negative input"Menggabungkan Semuanya
Klausa penjaga adalah kebiasaan kecil dengan manfaat besar:
- Tangani kasus batas di awal, lalu lakukan pengembalian.
- Jaga logika utama tetap tanpa indentasi tambahan.
- Gunakan
return/next/raisesesuai kebutuhan situasi.
def initials(name)
return "" if name.nil? || name.strip.empty?
name.split.map { |part| part[0].upcase }.join
end
puts initials(" ").inspect
puts initials("grace hopper")Pemeriksaan Cepat
Uji pemahaman Anda tentang klausa penjaga.
Rangkuman
Anda telah mempelajari klausa penjaga:
- Lakukan pengembalian awal untuk kasus yang tidak valid atau kasus batas.
return unlesskeluar ketika suatu persyaratan tidak terpenuhi.- Gunakan
nextuntuk melewati satu iterasi perulangan, danraiseuntuk kesalahan yang sebenarnya. - Hasilnya adalah metode yang datar dan dapat menjelaskan dirinya sendiri.
def safe_divide(a, b)
return nil if b.zero?
a / b
end
puts safe_divide(10, 0).inspect
puts safe_divide(10, 2)Pertanyaan yang Sering Diajukan
Apakah pelajaran “Klausa Penjaga” gratis?
Ya — teks lengkap “Klausa Penjaga” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Ruby Academy, upgrade ke CoddyKit PRO. Kursus Ruby Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Klausa Penjaga”?
Return awal yang rapi. Kamu berlatih Ruby Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Ruby Academy?
Tidak diperlukan pengalaman sebelumnya. Ruby Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Klausa Penjaga” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Ruby Academy ini?
Ya. Setiap pelajaran Ruby Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.