(Un) null
yerine (örneğin) sahip olmanın kolaylığını okudum Maybe
. Bu makaleyi okuduktan sonra , kullanmanınMaybe
(veya benzeri bir şey) daha iyi olacağına ikna oldum . Bununla birlikte, tüm "iyi bilinen" zorunlu veya nesne yönelimli programlama dillerinin (hala null
'hiçbir şey' değerini temsil edebilecek türlere denetlenmeyen erişime izin veren) Maybe
kullandığını ve çoğunlukla işlevsel programlama dillerinde kullanıldığını görünce şaşırdım .
Örnek olarak, aşağıdaki C # koduna bakın:
void doSomething(string username)
{
// Check that username is not null
// Do something
}
Burada bir şeyler kötü kokuyor ... Argüman boş olup olmadığını neden kontrol etmeliyiz? Her değişkenin bir nesneye referans içerdiğini varsaymalı mıyız? Gördüğünüz gibi, sorun tanımı gereği hemen hemen tüm değişkenlerin boş bir başvuru içermesidir. Hangi değişkenlerin "null" olduğuna ve hangilerinin olmayacağına karar verebilirsek ne olur ? Hata ayıklama ve bir "NullReferenceException" ararken bu bize çok çaba sarfeder. Varsayılan olarak hiçbir türün boş başvuru içeremeyeceğini hayal edin . Bunun yerine, bir değişkene yalnızca gerçekten ihtiyaç duyduğunuzda boş bir başvuru içerebileceğini açıkça belirtirsiniz . Belki arkasındaki fikir budur. Bazı durumlarda başarısız olan bir işleve sahipseniz (örneğin sıfıra bölme),Maybe<int>
, açıkça sonucun bir int olabileceğini, ancak aynı zamanda hiçbir şey olamayacağını da belirterek! Bu, belki null yerine tercih etmek için bir nedendir . Daha fazla örnekle ilgileniyorsanız, bu makaleyi okumanızı öneririm .
Gerçekler, çoğu türü varsayılan olarak null yapmanın dezavantajlarına rağmen, OO programlama dillerinin çoğunun aslında yaptığı gibi. Bu yüzden merak ediyorum:
null
Programlama dilinizde yerine ne tür argümanlar uygulamanız gerekirMaybe
? Nedenler var mı yoksa sadece "tarihi bagaj" mı?
Lütfen bu soruyu cevaplamadan önce null ve Belki arasındaki farkı anladığınızdan emin olun.
null
onun kavram yoktur ya da (IIRC Haskell böyle bir örneğidir).
null
uzun zamandan beri var olan dillerde yazılmış olduğunu unutmayın . Bunu düşürmek kolay değil.