0Pricing
Ruby Academy · Pelajaran

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

Memeriksa 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.class

Menggerakkan 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).total

Urutan 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 }
puts

Menyatukan Semuanya

each khusus memberi Anda kendali penuh atas iterasi:

  • yield sekali 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:

  • yield meneruskan elemen ke blok pemanggil.
  • Anda mengendalikan urutan penelusuran dan dapat menghasilkan nilai.
  • Sesuai konvensi, kembalikan self.
  • each adalah 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

  1. Menulis each Kustom
  2. Menyertakan Enumerable
  3. Enumerator Malas
  4. Objek Enumerator
← Kembali ke Ruby Academy