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.callMembuat 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 resultMeneruskan 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 demoProc 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 { }atauProc.new. - Jalankan dengan
.call,.(), atau[ ]. - Teruskan ke metode dengan
&. - Proc toleran terhadap perbedaan jumlah argumen dan menggunakan
returnpada tingkat metode.
pipeline = [proc { |s| s.upcase }, proc { |s| s + "!" }]
text = "hello"
pipeline.each { |step| text = step.call(text) }
puts textUji 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
returnpada 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.