Saya sangat suka kode bersih dan saya selalu ingin kode kode saya dengan cara terbaik. Tapi selalu ada satu hal, saya tidak begitu mengerti:
Kapan terlalu banyak "pemisahan masalah" tentang metode?
Katakanlah kita memiliki metode berikut:
def get_last_appearance_of_keyword(file, keyword):
with open(file, 'r') as file:
line_number = 0
for line in file:
if keyword in line:
line_number = line
return line_number
Saya pikir metode ini baik-baik saja. Ini sederhana, mudah dibaca dan jelas, sesuai dengan namanya. Tetapi: Ini tidak benar-benar melakukan "hanya satu hal". Ini benar-benar membuka file, dan kemudian menemukannya. Itu berarti saya dapat membaginya lebih jauh (Juga mempertimbangkan "Prinsip Tanggung Jawab Tunggal"):
Variasi B (Ya, ini masuk akal. Dengan cara ini kita dapat dengan mudah menggunakan kembali algoritma untuk menemukan tampilan kata kunci terakhir dalam sebuah teks, namun sepertinya "terlalu banyak". Saya tidak bisa menjelaskan mengapa, tapi saya hanya "merasa" "seperti itu):
def get_last_appearance_of_keyword(file, keyword):
with open(file, 'r') as text_from_file:
line_number = find_last_appearance_of_keyword(text_from_file, keyword)
return line_number
def find_last_appearance_of_keyword(text, keyword):
line_number = 0
for line in text:
if keyword in line:
line_number = line
return line_number
Variasi C (Ini hanya tidak masuk akal menurut saya. Kami pada dasarnya merangkum satu-liner ke metode lain hanya dengan satu baris dua kali. Tetapi orang dapat berargumen, bahwa cara membuka sesuatu dapat berubah di masa depan, karena beberapa permintaan fitur , dan karena kami tidak ingin mengubahnya berkali-kali, tetapi sekali saja, kami hanya merangkumnya dan memisahkan fungsi utama kami lebih jauh):
def get_last_appearance_of_keyword(file, keyword):
text_from_file = get_text_from_file(file)
line_number = find_keyword_in_text(text_from_file, keyword)
return line_number
def get_text_from_file(file):
with open(file, 'r') as text:
return text
def find_last_appearance_of_keyword(text, keyword):
line_number = 0
for line in text:
if check_if_keyword_in_string(line, keyword):
line_number = line
return line_number
def check_if_keyword_in_string(text, keyword):
if keyword in string:
return true
return false
Jadi pertanyaan saya sekarang: Apa cara yang benar dalam menulis kode ini dan mengapa pendekatan lain benar atau salah? Saya selalu belajar: Pemisahan, tetapi tidak pernah ketika itu terlalu banyak. Dan bagaimana saya bisa yakin di masa depan, bahwa itu "tepat" dan bahwa tidak perlu lebih banyak pemisahan ketika saya coding lagi?
line_number = 0
adalah default numerik, dan line_number = line
memberikan nilai string (yang merupakan isi baris bukan posisinya )
open
dan in
. Menerapkan kembali fungsi yang ada tidak meningkatkan pemisahan kekhawatiran, kekhawatiran sudah ditangani dalam fungsi yang ada!