Ya, hal-hal yang saya lihat di utas ini semuanya hebat, tetapi saya memiliki definisi tentang 'invarian' yang telah sangat membantu saya di tempat kerja.
Invarian adalah aturan logis apa pun yang harus dipatuhi selama pelaksanaan program Anda yang dapat dikomunikasikan kepada manusia, tetapi tidak untuk kompiler Anda.
Definisi ini bermanfaat karena memecah kondisi menjadi dua kelompok: mereka yang dapat dipercayai oleh pembuat kompiler, dan mereka yang harus didokumentasikan, dibahas, dikomentari, atau dikomunikasikan kepada kontributor agar mereka dapat berinteraksi dengan basis kode tanpa memperkenalkan bug .
Juga, definisi ini sangat membantu karena memungkinkan Anda untuk menggunakan generalisasi, "Invarian buruk".
Sebagai contoh, shifter dalam mobil transmisi manual direkayasa untuk menghindari invarian. Jika saya mau, saya bisa membuat transmisi dengan satu tuas untuk setiap gigi. Tuas ini bisa maju ("bertunangan") atau kembali ("terlepas"). Dalam sistem seperti itu, saya telah membuat "invarian", yang mungkin didokumentasikan seperti itu:
"Sangat penting bahwa gigi yang saat ini sedang digunakan dilepaskan sebelum gigi yang berbeda digunakan. Untuk menggunakan dua gigi pada saat yang sama akan menyebabkan tekanan mekanis yang akan merobek transmisi. Selalu melepaskan gigi yang saat ini sedang terlibat sebelum menggunakan yang lain."
Jadi, orang mungkin menyalahkan transmisi yang rusak pada mengemudi yang ceroboh. Mobil modern, bagaimanapun, menggunakan tongkat tunggal yang berputar di sekitar gigi. Ini dirancang sedemikian rupa sehingga, pada mobil stick-shift modern, tidak mungkin untuk menggunakan dua roda gigi secara bersamaan.
Dengan cara ini, kita dapat mengatakan bahwa transmisi telah direkayasa untuk 'menghapus invarian', karena tidak mengizinkan dirinya untuk dikonfigurasikan secara mekanis dengan cara yang melanggar aturan logis.
Setiap invarian semacam ini yang Anda hapus dari kode Anda merupakan peningkatan, karena ini menurunkan beban kognitif untuk bekerja dengannya.