Boş Nesne Kalıbını Kullan Blokları Dene/Yakala Değil

Boş nesne deseni, bir nesnenin boş veya tanımsız olduğu durumu işlemek için kullanılan bir tasarım desenidir. Desenin arkasındaki temel fikir, orijinal nesneyle aynı arayüze sahip olan ancak yöntemleri çağrıldığında hiçbir şey yapmayan boş bir nesne yaratmaktır. Bu, koddaki boş nesneleri kontrol etme ihtiyacını ortadan kaldırır ve tasarımı basitleştirir.
Null nesne desenini bilmiyorsak, try/catch
aşağıdaki gibi bir yöntemle hata senaryolarıyla başa çıkmak için kod yazacağız:

Yukarıdaki kodun çıktısı şu şekildedir:
An error occurred creating the account: Username is required
Yukarıdaki kodun sorunu şudur: her kullandığımızda , istisnaları yakalamak için create_account
kullanmamız gerekir . try/catch
Bazı projelerde birçok kez kullanmak zorunda kalırsak create_account
, başa çıkması oldukça karmaşık hale gelecektir.
Yukarıdaki try/catch problemi nasıl çözülür?
Bu, boş nesne deseninin kullanıma girdiği zamandır. Yukarıdaki durumu daha pratik bir kullanıma genişletelim.
try/catch
İstisnaları oluşturmak için blok kullanırsak :

Boş nesne desenini kullanmak için:

calculate_total_balance
Yukarıdaki yeniden düzenlemeden sonra, null nesne kalıbını kullanarak işlevi basitleştirdik class NullAccount
. Hatalarla başa çıkmak için bloklara ihtiyacımız yok ve bunun her zaman geçerli bir nesne döndüreceğini try
varsayabiliriz .Account.from_string
Bu, müşteri kodunun boş nesneyi her zaman kontrol etmek zorunda kalmadan gerçek bir nesne gibi ele almasını sağlar None
. null
Boş nesne, güvenli bir varsayılan davranış sağlar ve gerçek bir nesne kullanılabilir hale gelene kadar yer tutucu olarak kullanılabilir.
Go neden boş nesne modeline sahip değil?
Go'da, bir işlevden birden çok değer döndürmek yaygındır, ikinci değer, başarıyı veya başarısızlığı gösteren bir boole değeridir. Bu kalıba “comma-ok” veya “tuple” kalıbı denir. Örneğin, bir haritada bir anahtarı arayan bir işlev, değeri ve anahtarın bulunup bulunmadığını gösteren bir boole döndürebilir. Bu yaklaşım, boş bir nesne modeline olan ihtiyacı ortadan kaldırır.
nil
Ayrıca Go , bir değerin yokluğunu veya yokluğunu temsil etmek için kullanılabilen yerleşik bir değere sahiptir . nil
Go , kodu basitleştirdiği ve karmaşıklığı azalttığı için boş bir nesne deseni sunmak yerine bu değeri kullanmayı teşvik eder .