module dan include
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 27 dari 57.
module adalah kumpulan method bernama. module tidak dapat membuat object, tetapi class dapat include module tersebut, lalu setiap instance memiliki method dari module seolah-olah class mendefinisikannya. Ini disebut mixin:
module Greetable
def greet
"Hello, I am #{name}"
end
end
class Person
include Greetable
attr_reader :name
def initialize(name)
@name = name
end
end
puts Person.new("Ada").greetOutput:
Hello, I am Adamethod dalam module dapat memanggil method yang disediakan class, seperti name di atas. Jadi, satu module dapat digunakan oleh class yang sangat berbeda, selama setiap class menyediakan hal yang digunakan module tersebut:
module Greetable
def greet
"Hello, I am #{name}"
end
end
class Robot
include Greetable
def name
"R2"
end
end
class City
include Greetable
def name
"Paris"
end
end
puts Robot.new.greet
puts City.new.greetOutput:
Hello, I am R2
Hello, I am ParisSebuah class hanya memiliki satu superclass, tetapi dapat menyertakan modul sebanyak apa pun. include? menanyakan apakah sebuah class menyertakan modul, dan modul tersebut muncul di ancestors, tepat setelah class. Di sinilah Ruby mencari method-nya:
module Swimmer
def swim
"swimming"
end
end
module Flyer
def fly
"flying"
end
end
class Duck
include Swimmer
include Flyer
end
d = Duck.new
puts "#{d.swim}, #{d.fly}"
puts Duck.include?(Flyer)
p Duck.ancestors.take(3)Output:
swimming, flying
true
[Duck, Flyer, Swimmer]Module juga mengelompokkan class dan konstanta yang saling berkaitan dengan satu nama, yaitu namespace, agar namanya tidak berbenturan. Shop::Item dan Game::Item adalah class yang berbeda:
module Shop
TAX = 0.2
class Item
def label
"shop item, tax #{TAX}"
end
end
end
puts Shop::Item.new.label
puts Shop::TAXOutput:
shop item, tax 0.2
0.2Tantangan
MudahLengkapi module dan class. Greetable#greet mengembalikan Hello, I am Ada, menggunakan name milik object. Walkable#walk(steps) menambahkan steps ke penghitung yang disimpan di @steps (pertama kali dimulai dari nil) dan mengembalikan Ada walked 30 steps, total berjalan. Person menyertakan kedua module; Robot hanya menyertakan Greetable dan namanya adalah R- diikuti nomor serial.
Code yang disediakan membuat person dan robot dari baris pertama (Ada 7), lalu menjalankan perintah greet p, greet r atau walk 10 (untuk person) dan mencetak setiap hasil, lalu robot walks: false.
Letakkan kodemu di greetable.rb, walkable.rb, person.rb, dan robot.rb. main.rb berisi code input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
require_relative 'greetable'
require_relative 'walkable'
require_relative 'person'
require_relative 'robot'
# Kode input/output yang disediakan: biarkan apa adanya
input = []
while (line = gets)
input << line.chomp
end
name, serial = input[0].split
person = Person.new(name)
robot = Robot.new(serial)
input.drop(1).each do |line|
command, arg = line.split
if command == "walk"
puts person.walk(arg.to_i)
else
target = arg == "p" ? person : robot
puts target.greet
end
end
puts "robot walks: #{Robot.include?(Walkable)}"
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1class dan object
Bekerja dengan fileMendefinisikan classVariabel instansmethod dan selfto_s dan inspectRingkasan: Kartu Perpustakaan4Enkapsulasi
private methodprotected methodprivate setterMelindungi StatusUlasan, Mesin Penjual Otomatis7Polimorfisme dan Duck Typing
PolimorfismeDuck TypingMethod Abstrakcase dan classRingkasan: Method Pembayaran2Accessor dan self
Pembaca dan PenulisSetter Kustomself dalam methodIdentitas dan KesetaraanRangkuman: Daftar Kontak8Special method
Kesetaraan dan hashOperator methodPengindeksan dan penambahanKoleksi kustomRingkasan: Pecahan11Proyek: Manajemen Perpustakaan
Buku dan AnggotaMeminjam Buku3Method dan Variabel class
Method classVariabel instance classKonstantaMethod pabrikRangkuman: Kode Kupon6module dan mixin
module dan includeMemperluas objectmodule Comparablemodule EnumerableUlasan: Liga OlahragaLatihan sendiri: Compiler Ruby online