Sebagian besar blog atau tutorial atau buku memiliki metode privat di bagian bawah kelas / modul apa pun. Apakah ini praktik terbaik?
Saya merasa memiliki metode privat jika diperlukan lebih nyaman. Sebagai contoh:
public
def my_method
# do something
minion_method
end
private
def minion_method
# do something
end
public
def next_method
end
Dengan cara ini saya menemukan kode lebih mudah dibaca daripada menggulir ke atas dan ke bawah terus menerus yang sangat menjengkelkan.
Apakah ada yang sangat salah dalam pendekatan ini? Apakah memiliki metode privat di bawah bukan hanya praktik terbaik dan sesuatu yang lain?
ruby
conventions
ZX12R
sumber
sumber
private def my_method...end
Jawaban:
Praktik terbaik dalam sudut pandang saya adalah pergi secara berurutan dan mendeklarasikan metode Anda tanpa menjaga privasi dalam sudut pandang.
Pada akhirnya, Anda dapat membuat metode apa pun menjadi pribadi hanya dengan menambahkan:
private :xmethod
Contoh:
Apakah ini membenarkan pertanyaan Anda?
sumber
Ada juga opsi untuk menambahkan
private
definisi metode sejak Ruby 2.1.Melihat definisinya, Anda langsung tahu jika suatu metode bersifat pribadi, di mana pun dalam file itu didefinisikan. Ini sedikit lebih mengetik (jika Anda tidak melengkapi otomatis) dan tidak semua
def
s Anda akan disejajarkan dengan baik.sumber
private
hanya sekali, sebelumymethod
, juga berfungsi. Tidak perlu menambahkannya berkali-kali.zmethod
tanpaprivate
, metode ini tidak akan bersifat pribadi. Jadi, Anda perlu mengulanginya (setidaknya dengan Ruby 2.3).Seperti yang telah ditunjukkan orang lain, konvensi adalah meletakkan metode privat di bagian bawah, di bawah satu kelas privat. Namun, Anda mungkin juga harus tahu bahwa banyak programmer menggunakan metode indentasi ganda (4 spasi, bukan 2) untuk ini. Alasannya adalah sering kali Anda tidak melihat "pribadi" di editor teks Anda dan menganggapnya sebagai publik. Lihat ilustrasi di bawah ini:
Metode ini akan mencegah Anda dari keharusan untuk menggulir ke atas dan ke bawah dan akan membuat programmer lain lebih nyaman dalam kode Anda.
sumber
begin..end
setelahnyaprivate
. Kemudian indentasi dapat diatur secara otomatis oleh editor karena kode di dalambegin
is (dalam contoh di atas) secara semantik menjorok ke dalam 4 spasi.public
dan kemudianprivate
Saya pikir metode publik adalah semacam antarmuka objek, dan logis untuk menempatkannya di tempat yang paling menonjol yaitu di bagian atas file.
sumber
Anda tidak perlu menempatkan
public
atau diprivate
atas setiap metode. Saya biasanya meletakkan semua metode privat saya di bagian bawah kelas saya. Juga, tidak perlu mengatakan secara eksplisitpublic
karena metode bersifat publik secara default. Sebagai contoh:sumber
Saya berasal dari latar belakang java dan saya benci harus menggulir untuk melihat jenis metode. Saya pikir itu gila bahwa seseorang tidak dapat menentukan visibilitas metode per metode tanpa kejelekan. Jadi saya akhirnya memberi komentar
#private
sebelum setiap metode menyedot dan kemudian menyatakanprivate :...
.sumber
private def method...
membuatnya lebih bagusSaya tidak suka menentukan publik atau privat untuk setiap metode. Menempatkan semua metode pribadi di bagian bawah memungkinkan saya memiliki satu contoh "pribadi" per file. Saya kira ini masalah selera.
sumber
Salah satu gayanya adalah mengelompokkan metode bersama sehingga Anda hanya menggunakan
private
dan paling banyakprotected
sekali per kelas. Gaya lainnya adalah menentukan visibilitas tepat setelah definisi metode:Sejak Ruby 2.1.0
def
mengembalikan nama metode sebagai simbol, jadi gaya yang lebih ramping dimungkinkan:(Perhatikan bahwa kami menggunakan
private_class_method
untuk metode kelas - jika tidak, kami akan mendapatkannyaNameError: undefined method
karenaprivate
mengharapkan metode instance. Bahkan ketika menggunakannya sebagai makro seperti dalam contoh asli, itu hanya memengaruhi visibilitas metode instance.)Saya paling suka gaya visibilitas sebaris ini, karena memungkinkan Anda mengatur metode sesuai keinginan. Ini mengurangi risiko menambahkan metode baru di tempat yang salah dan secara tidak sengaja menjadikannya pribadi.
Sedangkan untuk sintaks metode kelas, Anda dapat menanganinya dengan cara ini:
sumber
private_class_method
panggilan sebelumnya, dan bagian terakhir tentang menggunakanclass << self
blok untuk menghindari penggunaan itu adalah tip yang bagus. Sampai sekarang, saya tidak tahu bahwa metode kelas "nornal" (dideklarasikan dengandef self.foo; end
bukannyaclass << self; def foo; end
tidak akan terpengaruh olehprivate
Dennis punya jawaban yang tepat, yaitu saat menggunakan ruby> = 2.1, awali def dengan private (or protected, public)
Tapi saya percaya bahwa sekarang juga mungkin untuk menggunakan private sebagai blok seperti:
sumber
Saya biasanya memesan metode saya sebagai berikut:
private
, ditulis hanya sekaliSaya menggunakan fitur "pergi ke definisi" di editor saya sehingga ini tidak melibatkan banyak pengguliran, dan dalam kasus apa pun, jika kelas cukup besar sehingga pengguliran menjadi masalah, mungkin harus dipecah menjadi beberapa kelas.
sumber
to_s
) di dekat akhir bagian publik.