0Pricing
Ruby Academy · Pelajaran

Proc

Objek block yang dapat digunakan kembali.

Proc adalah pelajaran Ruby Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Objek Blok yang Dapat Digunakan Kembali

Blok bukan objek secara mandiri, jadi Anda tidak dapat menyimpannya dalam variabel. Sebuah Proc membungkus blok menjadi objek nyata yang dapat Anda simpan, teruskan, dan panggil nanti.

greeter = Proc.new { puts "Hello!" }
greeter.call
greeter.call

Membuat Proc

Ada dua cara umum untuk membuat Proc: Proc.new { ... } dan metode Kernel proc { ... } yang lebih singkat. Keduanya menghasilkan jenis objek yang sama.

double = proc { |x| x * 2 }
p double.call(5)

Memanggil Proc

Anda dapat memanggil Proc dengan beberapa cara: .call, .(), dan singkatan menggunakan kurung siku [ ]. Semuanya setara.

square = proc { |x| x * x }
puts square.call(4)
puts square.(4)
puts square[4]

Proc Menerima Argumen

Proc menerima parameter seperti blok, yang dideklarasikan di antara tanda pipa.

add = proc { |a, b| a + b }
puts add.call(3, 7)

Menyimpan Proc dalam Larik

Karena Proc adalah objek, Anda dapat menyimpan kumpulan perilaku dan menjalankannya secara bergiliran.

ops = [proc { |x| x + 1 }, proc { |x| x * 2 }]
result = 5
ops.each { |op| result = op.call(result) }
puts result

Meneruskan Proc sebagai Blok

Tambahkan awalan & pada Proc untuk meneruskannya ke metode yang mengharapkan blok. Ruby mengubahnya kembali ke bentuk blok.

printer = proc { |n| puts "Item: #{n}" }
[1, 2, 3].each(&printer)

Menangkap Blok sebagai Proc

Kebalikannya juga dapat dilakukan: &block dalam tanda tangan metode menangkap blok yang diberikan sebagai Proc yang dapat Anda simpan.

def make_handler(&block)
  block
end
h = make_handler { |msg| puts "Got: #{msg}" }
h.call("ping")

Proc Toleran terhadap Jumlah Argumen

Salah satu sifat pentingnya adalah Proc tidak mempermasalahkan jumlah argumen yang tidak sesuai. Argumen yang kurang menjadi nil, sedangkan argumen tambahan diabaikan.

p1 = proc { |a, b| puts "a=#{a.inspect} b=#{b.inspect}" }
p1.call(1)
p1.call(1, 2, 3)

Proc dan Nilai Kembalian

return di dalam Proc mengembalikan nilai dari metode yang membungkusnya, bukan hanya dari Proc tersebut. Hal ini dapat mengejutkan Anda, jadi berhati-hatilah.

def demo
  p = proc { return 10 }
  p.call
  20  # never reached
end
puts demo

Proc Menangkap Lingkungannya

Proc mengingat variabel dalam lingkup tempat Proc tersebut didefinisikan. Dengan demikian, Proc merupakan closure, topik yang akan kita bahas lebih lanjut nanti.

factor = 3
times_factor = proc { |n| n * factor }
puts times_factor.call(10)

Menyatukannya

Proc mengubah blok menjadi objek kelas satu:

  • Buat dengan proc { } atau Proc.new.
  • Jalankan dengan .call, .(), atau [ ].
  • Teruskan ke metode dengan &.
  • Proc toleran terhadap perbedaan jumlah argumen dan menggunakan return pada tingkat metode.
pipeline = [proc { |s| s.upcase }, proc { |s| s + "!" }]
text = "hello"
pipeline.each { |step| text = step.call(text) }
puts text

Uji Cepat

Uji pemahaman Anda tentang Proc.

Ringkasan

Anda telah mempelajari Proc:

  • Proc adalah blok yang dibungkus sebagai objek.
  • Buat dengan proc/Proc.new; jalankan dengan .call.
  • Teruskan ke metode menggunakan &.
  • Proc menoleransi ketidaksesuaian jumlah argumen dan menggunakan return pada tingkat metode.
shout = proc { |word| puts word.upcase }
shout.call("ruby")

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Proc” gratis?

Ya — teks lengkap “Proc” 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 “Proc”?

Objek block yang dapat digunakan kembali. 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 2 dari 4.

Berapa lama pelajaran “Proc” 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.

Semua pelajaran dalam kursus ini

  1. Rangkuman Block
  2. Proc
  3. Lambda
  4. Closure dan Scope
← Kembali ke Ruby Academy