Menulis each Kustom
Implementasikan iterasi.
Menulis each Kustom adalah pelajaran Ruby Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Menerapkan Iterasi
Iterasi Ruby berpusat pada satu metode: each. Dengan menulis each Anda sendiri, Anda menentukan cara koleksi ditelusuri dan membuka seluruh ekosistem iterasi.
class Trio
def each
yield 1
yield 2
yield 3
end
end
Trio.new.each { |n| puts n }each Menghasilkan Nilai
Di dalam each, panggil yield sekali untuk setiap elemen. Blok yang diberikan pemanggil menerima setiap nilai secara bergantian.
class Days
NAMES = ["Mon", "Tue", "Wed"]
def each
NAMES.each { |d| yield d }
end
end
Days.new.each { |day| puts day }Menyimpan Data Internal
Biasanya each menelusuri data yang disimpan dalam variabel instans.
class Stack
def initialize
@items = []
end
def push(x); @items << x; self; end
def each
@items.each { |i| yield i }
end
end
s = Stack.new
s.push(10).push(20)
s.each { |x| puts x }Urutan Penelusuran Khusus
each Anda dapat melakukan iterasi dalam urutan apa pun yang Anda inginkan, misalnya secara terbalik.
class Reversed
def initialize(arr); @arr = arr; end
def each
i = @arr.length - 1
while i >= 0
yield @arr[i]
i -= 1
end
end
end
Reversed.new([1, 2, 3]).each { |x| puts x }Menghasilkan Beberapa Nilai
yield dapat meneruskan lebih dari satu nilai, yang diterima blok sebagai beberapa parameter, seperti kunci dan nilai sebuah hash.
class Pairs
def each
yield :a, 1
yield :b, 2
end
end
Pairs.new.each { |key, value| puts "#{key}=#{value}" }each Mengembalikan self
Sesuai konvensi, each mengembalikan koleksi itu sendiri agar pemanggilan dapat dirangkai. Mengembalikan self dari each sesuai dengan perilaku bawaan.
class Box
def initialize(*x); @x = x; end
def each
@x.each { |i| yield i }
self
end
end
result = Box.new(1, 2).each { |i| }
puts result.classMemeriksa Keberadaan Blok
Tangani kondisi ketika blok tidak ada agar each tanpa argumen tidak menyebabkan kegagalan, biasanya dengan mengembalikan enumerator yang akan dibahas nanti.
class List
def initialize(*x); @x = x; end
def each
return @x.to_enum unless block_given?
@x.each { |i| yield i }
end
end
puts List.new(5, 6).each.classMenggerakkan Metode Lain
Setelah each tersedia, Anda dapat membangun metode lain di atasnya dalam kelas yang sama.
class Numbers
def initialize(*n); @n = n; end
def each; @n.each { |i| yield i }; end
def total
sum = 0
each { |i| sum += i }
sum
end
end
puts Numbers.new(1, 2, 3, 4).totalUrutan yang Dihitung
each tidak harus menyimpan apa pun; metode ini dapat menghasilkan nilai secara langsung saat diperlukan.
class Evens
def initialize(limit); @limit = limit; end
def each
n = 0
while n <= @limit
yield n
n += 2
end
end
end
Evens.new(8).each { |x| puts x }Dasar bagi Enumerasi
each Anda adalah satu-satunya blok pembangun yang diperlukan Enumerable. Pada pelajaran berikutnya, Anda akan menyertakannya dan mendapatkan puluhan metode secara gratis.
class Range3
def each
(1..3).each { |n| yield n }
end
end
Range3.new.each { |n| print n }
putsMenyatukan Semuanya
each khusus memberi Anda kendali penuh atas iterasi:
yieldsekali untuk setiap elemen.- Telusuri dalam urutan apa pun, hasilkan nilai, atau hasilkan pasangan.
- Sesuai konvensi, kembalikan
self.
class Countdown
def initialize(from); @from = from; end
def each
@from.downto(1) { |n| yield n }
end
end
Countdown.new(3).each { |n| puts n }Pemeriksaan Singkat
Uji pemahaman Anda tentang each khusus.
Rangkuman
Anda telah mempelajari cara menulis each khusus:
yieldmeneruskan elemen ke blok pemanggil.- Anda mengendalikan urutan penelusuran dan dapat menghasilkan nilai.
- Sesuai konvensi, kembalikan
self. eachadalah dasar bagi Enumerable.
class Squares
def initialize(n); @n = n; end
def each
(1..@n).each { |i| yield i * i }
end
end
Squares.new(4).each { |sq| puts sq }Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menulis each Kustom” gratis?
Ya — teks lengkap “Menulis each Kustom” 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 “Menulis each Kustom”?
Implementasikan iterasi. 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 1 dari 4.
Berapa lama pelajaran “Menulis each Kustom” 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
- Menulis each Kustom
- Menyertakan Enumerable
- Enumerator Malas
- Objek Enumerator