Pemrograman adalah tentang pekerjaan
Saya pikir cara termudah untuk menjawab ini adalah untuk memahami kemajuan yang telah dibuat OOP selama bertahun-tahun. Segala sesuatu yang dilakukan dalam OOP (dan sebagian besar paradigma pemrograman, dalam hal ini) dimodelkan sekitar membutuhkan pekerjaan yang dilakukan .
Setiap kali suatu metode dipanggil, penelepon itu mengatakan, "Saya tidak tahu bagaimana melakukan pekerjaan ini, tetapi Anda tahu caranya, jadi Anda melakukannya untuk saya."
Ini menimbulkan kesulitan: apa yang terjadi ketika metode yang dipanggil umumnya tahu bagaimana melakukan pekerjaan, tetapi tidak selalu? Kami membutuhkan cara untuk berkomunikasi, "Saya ingin membantu Anda, saya benar-benar melakukannya, tetapi saya tidak bisa melakukannya."
Metodologi awal untuk mengomunikasikannya adalah mengembalikan nilai "sampah". Mungkin Anda mengharapkan bilangan bulat positif, sehingga metode yang dipanggil mengembalikan angka negatif. Cara lain untuk mencapai ini adalah dengan menetapkan nilai kesalahan di suatu tempat. Sayangnya, kedua cara ini menghasilkan kode boiler -let-me-check-over-di sini-untuk-memastikan-semuanya-halal . Ketika hal-hal menjadi lebih rumit, sistem ini berantakan.
Analogi Luar Biasa
Katakanlah Anda memiliki tukang kayu, tukang ledeng, dan tukang listrik. Anda ingin tukang ledeng untuk memperbaiki wastafel Anda, jadi dia memeriksanya. Tidak terlalu berguna jika dia hanya memberi tahu Anda, "Maaf, saya tidak bisa memperbaikinya. Sudah rusak." Sial, bahkan lebih buruk jika dia melihat, pergi, dan mengirimi Anda surat yang mengatakan ia tidak bisa memperbaikinya. Sekarang Anda harus memeriksa surat Anda bahkan sebelum Anda tahu dia tidak melakukan apa yang Anda inginkan.
Apa yang Anda inginkan adalah meminta dia memberi tahu Anda, "Dengar, saya tidak bisa memperbaikinya karena sepertinya pompa Anda tidak berfungsi."
Dengan informasi ini, Anda dapat menyimpulkan bahwa Anda ingin tukang listrik melihat masalahnya. Mungkin tukang listrik akan menemukan sesuatu yang berhubungan dengan tukang kayu, dan Anda harus memperbaikinya.
Heck, Anda mungkin bahkan tidak tahu Anda membutuhkan tukang listrik, Anda mungkin tidak tahu siapa yang Anda butuhkan. Anda hanya manajemen menengah dalam bisnis perbaikan rumah, dan fokus Anda adalah plumbing. Jadi, Anda memberi tahu bos tentang masalahnya, lalu dia memberi tahu tukang listrik untuk memperbaikinya.
Inilah yang menjadi pemodelan pengecualian: mode kegagalan kompleks dengan cara yang terpisah. Tukang ledeng tidak perlu tahu tentang tukang listrik - dia bahkan tidak perlu tahu bahwa seseorang yang berada di rantai dapat memperbaiki masalahnya. Dia hanya melaporkan masalah yang dia temui.
Jadi ... sebuah pola anti?
Oke, jadi memahami titik pengecualian adalah langkah pertama. Selanjutnya adalah memahami apa itu pola anti.
Untuk memenuhi syarat sebagai anti-pola, perlu
- menyelesaikan masalah
- memiliki konsekuensi negatif yang pasti
Poin pertama mudah dipenuhi - sistem bekerja, kan?
Poin kedua lebih lengket. Alasan utama untuk menggunakan pengecualian sebagai aliran kontrol normal buruk adalah karena itu bukan tujuan mereka. Setiap fungsionalitas yang diberikan dalam suatu program harus memiliki tujuan yang relatif jelas, dan mengkooptasi tujuan itu menyebabkan kebingungan yang tidak perlu.
Tapi itu bukan kerugian yang pasti . Ini cara yang buruk untuk melakukan sesuatu, dan aneh, tetapi anti-pola? Tidak. Hanya ... aneh.