namespace: modules adalah namespaces ... yang tidak ada di java;)
Saya juga beralih dari Java dan python ke Ruby, saya ingat punya pertanyaan yang persis sama ...
Jadi jawaban yang paling sederhana adalah modul itu adalah namespace, yang tidak ada di Java. Di java, pola pikir terdekat ke namespace adalah sebuah paket .
Jadi modul di ruby seperti apa di java:
class? Tidak ada
antarmuka? Tidak ada
kelas abstrak? Tidak ada
paket? Ya mungkin)
metode statis di dalam kelas di java: sama seperti metode di dalam modul di ruby
Dalam java, unit minimum adalah kelas, Anda tidak dapat memiliki fungsi di luar kelas. Namun dalam ruby ini mungkin (seperti python).
Jadi apa yang masuk ke modul?
kelas, metode, konstanta. Modul melindungi mereka di bawah namespace itu.
Tidak ada contoh: modul tidak dapat digunakan untuk membuat instance
Mixed ins: kadang model inheritance tidak baik untuk kelas, tetapi dalam hal fungsionalitas ingin mengelompokkan satu set kelas / metode / konstanta bersama-sama
Aturan tentang modul dalam ruby:
- Nama modul adalah UpperCamelCase
- konstanta dalam modul adalah SEMUA CAPS (aturan ini sama untuk semua konstanta ruby, tidak spesifik untuk modul)
- metode akses: gunakan. operator
- konstanta akses: gunakan :: simbol
contoh sederhana dari sebuah modul:
module MySampleModule
CONST1 = "some constant"
def self.method_one(arg1)
arg1 + 2
end
end
cara menggunakan metode di dalam modul:
puts MySampleModule.method_one(1) # prints: 3
cara menggunakan konstanta modul:
puts MySampleModule::CONST1 # prints: some constant
Beberapa konvensi lain tentang modul:
Gunakan satu modul dalam file (seperti kelas ruby, satu kelas per file ruby)