Macar Notasyonu'nın amacı, bilgileri tip sisteminde başka türlü kodlanamayan tanıtıcıya kodlamaktır. Benim düşünceme göre, eğer bu bilgiler kodlanacak kadar önemliyse, o zaman doğru bir şekilde kontrol edilebilecek tipte sistemde kodlanacak kadar önemli olduğu. Ve eğer bilgi önemli değilse, neden bu halt ile kaynak kodunuzu karıştırmak istiyorsunuz?
Veya daha özlü bir şekilde söylemek gerekirse: tip bilgisi tip sistemine aittir. (Not: statik tip bir sistem olması gerekmez . Tip hatalarını yakaladığı sürece, onları ne zaman yakaladığı umurumda değildir .)
Macar Notasyonunun kabul edilebilir kullanımları olarak Ölçü Birimlerinden birkaçı daha cevap vermiştir. (NASA'nın Mars İklim Orbiter'ı henüz kimseden bahsetmediğine şaşırdım, çünkü bu, Macar Notasyonu ile ilgili tartışmalarda her zaman ortaya çıktı.
İşte F # 'da basit bir örnek:
[<Measure>] type m
[<Measure>] type ft
let someLength = 48.15<m>
let someOtherLength = 16.2342<ft>
someLength + someOtherLength
// someLength + someOtherLength
// -------------^^^^^^^^^^^^^^^
// error FS0001: The unit of measure 'ft' does not match the unit of measure 'm'.
Bak anne, Macar yok!
Ben ise were yerine buraya türleri Macar Notasyonu'nu kullanmak için o bana bir bit yardımcı olmaz:
let mSomeLength = 48.15
let ftSomeOtherLength = 16.2342
mSomeLength + ftSomeOtherLength
// > val it : float = 64.3842
Derleyici düz geçmesine izin verdi. Şimdi esasen ne tür bir hata olduğunu anlamak için bir insana güveniyorum . Tip denetleyicisi bunun için değil mi?
Daha da iyisi, Frink programlama dilini kullanarak :
someLength = 48.15m
someOtherLength = 16.2342ft
someLength + someOtherLength
// 53.09818416 m (length)
// Wanna know the answer in a good old fashioned American unit?
someLength + someOtherLength -> yd
// 58.06888031496062992
// Are you an astrophysicist?
someLength + someOtherLength -> parsec
// 1.7207949554318336148e-15
// ... or a fundmentalist Christian who refuses to use units invented
// less than 2000 years ago?
someLength + someOtherLength -> biblicalcubits
// 95.893563822870765006
Yani, özet olarak: Macar Notasyonu'ndan hoşlanmıyorum. Asla kullanmamalısın.
Olduğu söyleniyor, Bence Macar Notasyonu kullanmanın iyi bir fikir olduğunu düşünüyorum. Bir dakika ne?
Evet! Bu özel durumda , bahsettiniz:
Ayrıca, kodumuzun çoğunun bool veya float gibi bir konseptin zaten bulunmadığı bazı garip DSP'ler üzerinde çalışması gerekir.
Ancak bu tam olarak Macar Notasyonu için tek mantıklı kullanım durumudur !
Not: Bütün kalbimle Frink'e bakmanızı tavsiye ederim. Kılavuzu, şimdiye kadarki en harika osuruk şakalarından bazılarını içeriyor. Aynı zamanda oldukça havalı bir dil :-)