Bu soruya bir göz atmayacağımdan şüpheleniyorum, ama ben çok deneyimli bir programcıyım ve umarım daha açık fikirli okuyuculardan bazıları ilgilenir.
Değer döndürme prosedürlerinin (VRP'ler) deterministik ve saf olması için nesne yönelimli programlama dillerine daha uygun olduğuna inanıyorum.
'VRP', bir ifadenin parçası olarak adlandırılan ve ifadenin değerlendirilmesi sırasında çağrının kavramsal olarak yerini alan bir dönüş değerine sahip bir işlevin modern akademik adıdır. Örneğin x = 1 + f(y)
, işlev gibi bir ifadede f
VRP olarak hizmet veriyor.
'Belirleyici', işlevin sonucunun yalnızca parametrelerinin değerlerine bağlı olduğu anlamına gelir. Aynı parametre değerleri ile tekrar çağırırsanız, aynı sonucu alacağınız kesindir.
'Saf', yan etki olmadığı anlamına gelir: işlevi çağırmak , sonucu hesaplamak dışında hiçbir şey yapmaz . Bu önemli olmadığı şeklinde yorumlanabilir pratikte yan etkinin , bu nedenle eğer VRP her çağrıldığında bir hata giderme mesajı verirse, örneğin, bu muhtemelen göz ardı edilebilir.
Dolayısıyla, C # 'da işleviniz deterministik ve saf değilse, onu bir void
işlev yapmanız gerektiğini (başka bir deyişle, bir VRP değil) ve döndürmesi gereken herhangi bir değerin bir out
veya bir ref
parametrede döndürülmesi gerektiğini söylüyorum .
Örneğin, bir veritabanı tablosundan bazı satırları silmek için bir işleviniz varsa ve sildiği satır sayısını döndürmesini istiyorsanız, bunu şöyle bir şekilde açıklamalısınız:
public void DeleteBasketItems(BasketItemCategory category, out int count);
Bazen bu işlevi çağırmak istiyor ama alamıyorsanız, count
her zaman bir aşırı yükleme bildirebilirsiniz.
Bu tarzın neden nesne yönelimli programlamaya daha çok uyduğunu bilmek isteyebilirsiniz . Genel olarak, (biraz kesin olmayan bir şekilde) 'prosedürel programlama' olarak adlandırılabilecek bir programlama tarzına uyar ve nesne yönelimli programlamaya daha iyi uyan bir prosedürel programlama stilidir.
Neden? Nesnelerin klasik modeli, özelliklere (diğer adıyla özniteliklere) sahip olmaları ve nesneyi (esas olarak) bu özellikleri okuyup güncelleyerek sorgulayıp manipüle etmenizdir. Bir yordamsal programlama stili bunu yapmayı kolaylaştırma eğilimindedir, çünkü özellikleri alan ve ayarlayan işlemler arasında rastgele kod çalıştırabilirsiniz.
Prosedürel programlamanın dezavantajı, her yerde rastgele kod çalıştırabildiğiniz için, küresel değişkenler ve yan etkiler yoluyla bazı çok geniş kapsamlı ve hatalara açık etkileşimler elde edebilirsiniz.
Bu nedenle, oldukça basit bir şekilde, kodunuzu okuyan birine bir işlevin, onu değersiz hale getirerek yan etkilere sahip olabileceği sinyalini vermek iyi bir uygulamadır .