Setiap angka yang tidak disebutkan namanya yang tidak segera terlihat dari konteks adalah angka ajaib. Agak konyol untuk mendefinisikan angka-angka yang memiliki makna yang segera jelas dari konteks.
Dalam Django (kerangka web python), saya dapat mendefinisikan beberapa bidang basis data dengan angka mentah seperti:
firstname = models.CharField(max_length=40)
middlename = models.CharField(max_length=40)
lastname = models.CharField(max_length=40)
yang lebih jelas (dan praktik yang disarankan ) daripada mengatakan
MAX_LENGTH_NAME = 40
...
firstname = models.CharField(max_length=MAX_LENGTH_NAME)
middlename = models.CharField(max_length=MAX_LENGTH_NAME)
lastname = models.CharField(max_length=MAX_LENGTH_NAME)
karena saya tidak mungkin perlu mengubah panjang (dan selalu dapat dibandingkan dengan max_length
bidang). Jika saya perlu mengubah panjang bidang setelah awalnya menyebarkan aplikasi, saya harus mengubahnya tepat satu lokasi per bidang dalam kode Django saya, dan kemudian menulis migrasi untuk mengubah skema DB. Jika saya perlu referensi max_length
bidang yang ditentukan dari jenis objek, saya bisa melakukannya secara langsung - jika bidang-bidang itu mendefinisikan Person
kelas, saya bisa menggunakan Person._meta.get_field('firstname').max_length
untuk mendapatkanmax_length
sedang digunakan (yang didefinisikan di satu tempat). Fakta bahwa 40 yang sama digunakan untuk banyak bidang tidak relevan karena saya mungkin ingin mengubahnya secara mandiri. Panjang nama depan tidak boleh bergantung pada panjang middlename atau nama belakang; mereka adalah nilai yang terpisah dan dapat berubah secara independen.
Seringkali indeks array dapat menggunakan angka yang tidak disebutkan namanya; seperti jika saya memiliki file data CSV yang ingin saya masukkan ke dalam kamus python, dengan elemen pertama di baris sebagai kamus yang key
akan saya tulis:
mydict = {}
for row in csv.reader(f):
mydict[row[0]] = row[1:]
Tentu saya bisa memberi nama index_column = 0
dan melakukan sesuatu seperti:
index_col = 0
mydict = {}
for row in csv.reader(f):
mydict[row[index_col]] = row[:index_col] + row[index_col+1:]
atau lebih buruk menentukan after_index_col = index_col + 1
untuk menyingkirkan index_col+1
, tetapi itu tidak membuat kode lebih jelas dalam pandangan saya. Juga, jika saya memberi index_col
nama, saya lebih baik membuat kode bekerja bahkan jika kolomnya tidak 0 (maka row[:index_col] +
bagian itu).