Referansların işaretçiler üzerindeki en büyük avantajlarından biri daha fazla basitlik ve okunabilirliktir. Her zaman olduğu gibi, bir şeyi basitleştirdiğinizde, kullanımını kolaylaştırırsınız, ancak esneklik ve kontrol pahasına, düşük seviyeli şeylerle elde edersiniz (diğer insanların da bahsettiği gibi).
İşaretçiler genellikle 'çirkin' oldukları için eleştirilir.
class* myClass = new class();
Şimdi onu her kullandığınızda, önce ya da
myClass->Method() or (*myClass).Method()
Okunabilirliğin bir kısmını kaybetmesine ve karmaşıklık eklemesine rağmen, insanların yine de, gerçek nesneyi değiştirebilmeniz için (değere göre geçmek yerine) ve büyük nesneleri kopyalamak zorunda kalmadan performans kazanımı için işaretçileri sık sık parametre olarak kullanmaları gerekiyordu.
Bana göre bu, işaretçilerle aynı faydayı sağlamak için, ancak tüm bu işaretçi sözdizimi olmadan referansların 'doğuşunun' nedenidir. Artık gerçek nesneyi (sadece değerini değil) iletebilirsiniz VE nesne ile daha okunaklı, normal bir etkileşim yoluna sahipsiniz.
MyMethod(&type parameter)
{
parameter.DoThis()
parameter.DoThat()
}
C ++ referansları, C # / Java referanslarından farklıdır, çünkü ona bir değer atadıktan sonra, onu yeniden atayamazsınız (ve bildirildiğinde atanması gerekir). Bu, bir const işaretçisi (başka bir nesneye yeniden işaret edilemeyen bir işaretçi) kullanmakla aynıydı.
Java ve C #, yıllar boyunca C / C ++ 'da birikmiş birçok karmaşayı temizleyen çok yüksek seviyeli, modern dillerdir ve işaretçiler kesinlikle' temizlenmesi 'gereken şeylerden biriydi.
İşaretçileri bilmek hakkındaki yorumunuz sizi daha güçlü bir programcı yaptığına göre, bu çoğu durumda doğrudur. Bir şeyin sadece bilmeden kullanmak yerine 'nasıl' çalıştığını biliyorsanız, bunun size genellikle bir avantaj sağlayacağını söyleyebilirim. Bir kenarın ne kadarı her zaman değişecektir. Sonuçta, nasıl uygulandığını bilmeden bir şeyi kullanmak, OOP ve Arayüzlerin birçok güzelliğinden biridir.
Bu özel örnekte, işaretçiler hakkında ne bilmek size referanslar konusunda yardımcı olur? Bir C # referansının nesnenin kendisi OLMADIĞINI, ancak nesneyi işaret ettiğini anlamak çok önemli bir kavramdır.
# 1: Değere göre
GEÇMİYORSUNUZ Başlangıç olarak, bir işaretçi kullandığınızda işaretçinin sadece bir adres tuttuğunu bilirsiniz, hepsi bu. Değişkenin kendisi neredeyse boş ve bu yüzden argüman olarak geçmek çok güzel. Performans kazancına ek olarak, gerçek nesneyle çalışıyorsunuz, bu nedenle yaptığınız herhangi bir değişiklik geçici değil
# 2: Çok Biçimlilik / Arayüzler
Arayüz türü olan ve bir nesneye işaret eden bir referansınız olduğunda, nesnenin daha fazla yeteneği olsa bile, yalnızca o arayüzün yöntemlerini çağırabilirsiniz. Nesneler ayrıca aynı yöntemleri farklı şekilde uygulayabilir.
Bu kavramları iyi anlıyorsanız, işaretçi kullanmadığınız için çok fazla şey kaçırdığınızı sanmıyorum. C ++ genellikle programlama öğrenmek için bir dil olarak kullanılır çünkü bazen ellerinizi kirletmek iyidir. Ayrıca, alt düzey yönlerle çalışmak, modern bir dilin rahatlığını takdir etmenizi sağlar. C ++ ile başladım ve şimdi bir C # programcısıyım ve ham işaretçilerle çalışmanın başlık altında neler olup bittiğini daha iyi anlamama yardımcı olduğunu hissediyorum.
Herkesin işaretçilerle başlamasının gerekli olduğunu sanmıyorum, ancak önemli olan neden değer türleri yerine referansların kullanıldığını anlamaları ve bunu anlamanın en iyi yolu atasına, işaretçiye bakmaktır.