Saya sering menemukan diri saya mengembalikan boolean dari suatu metode, yang digunakan di banyak lokasi, untuk memuat semua logika di sekitar metode itu di satu tempat. Semua metode panggilan (internal) yang perlu diketahui adalah apakah operasi itu berhasil, atau tidak.
Saya menggunakan Python tetapi pertanyaannya tidak selalu spesifik untuk bahasa itu. Hanya ada dua opsi yang bisa saya pikirkan
- Naikkan pengecualian, meskipun situasinya tidak luar biasa, dan ingatlah untuk menangkap pengecualian itu di setiap tempat fungsi tersebut dipanggil
- Kembalikan boolean seperti yang saya lakukan.
Ini adalah contoh yang sangat sederhana yang menunjukkan apa yang saya bicarakan.
import os
class DoSomething(object):
def remove_file(self, filename):
try:
os.remove(filename)
except OSError:
return False
return True
def process_file(self, filename):
do_something()
if remove_file(filename):
do_something_else()
Meskipun fungsional, saya benar-benar tidak menyukai cara melakukan sesuatu, ini "berbau", dan kadang-kadang dapat menghasilkan banyak jika bersarang. Tapi, saya tidak bisa memikirkan cara yang lebih sederhana.
Saya bisa beralih ke filosofi yang lebih LBYL dan menggunakan os.path.exists(filename)
sebelum mencoba penghapusan tetapi tidak ada jaminan file tidak akan dikunci sementara itu (tidak mungkin tapi mungkin) dan saya masih harus menentukan apakah penghapusan telah berhasil atau tidak.
Apakah ini desain yang "dapat diterima" dan jika tidak, apa cara yang lebih baik untuk mendesain ini?