Genel kullanım için otomatik olarak beğenmeme neden olan birkaç neden var:
- Kodu değiştirmeden yeniden aktive edebilirsiniz. Evet, bu otomatik kullanmanın yararı olarak listelenen şeylerden biridir. Bir fonksiyonun dönüş tipini değiştirmeniz yeterlidir ve onu çağıran kodun tümü otomatik kullanılıyorsa, ek çaba göstermeniz gerekmez! Derlemeye bastığınızda, - 0 uyarı, 0 hata - oluşturur - ve sadece fonksiyonun kullanıldığı 80 yeri gözden geçirme ve potansiyel olarak değiştirme karmaşası ile uğraşmadan kodunuzu kontrol edin.
Bekle, bu gerçekten iyi bir fikir mi? Tür bu kullanım durumlarından yarım düzine kadar önemliyse ve şimdi bu kod gerçekten farklı davranıyorsa? Bu aynı zamanda, yalnızca girdi değerlerini değil, işlevi çağıran diğer sınıfların özel uygulamasının davranışını değiştirerek örtük olarak enkapsülasyonu da kırabilir.
1 A. "Kendini belgeleyen kod" kavramına inanıyorum. Kendi kendini belgeleyen kodun ardındaki sebep, yorumların eski haline gelme eğiliminde olması, artık kodun ne yaptığını yansıtmamasıdır, oysa kodun kendisi - açık bir şekilde yazılırsa - kendini açıklayıcıdır, daima güncel kalır. niyetine göre ve sizi eski yorumlarla karıştırmaz. Kodun kendisini değiştirmeye gerek kalmadan türler değiştirilebilirse, kod / değişkenlerin kendileri eski hale gelebilir. Örneğin:
auto bThreadOK = CheckThreadHealth ();
Sorunun dışında, CheckThreadHealth () 'in bir noktada bir bool yerine varsa hata durumunu gösteren bir enum değeri döndürmek için yeniden düzenlendi. Ancak bu değişikliği yapan kişi bu özel kod satırını incelemeyi kaçırdı ve derleyici hiçbir uyarı vermedi, çünkü herhangi bir uyarı veya hata olmadan derlendi.
- Asıl türlerin ne olduğunu asla bilemezsiniz. Bu aynı zamanda otomatik bir birincil "fayda" olarak listelenir. Neden bir işlevin size verdiğini, neden “Kim umrunda?
Muhtemelen bu tür işler bile. İşe yarar diyorum, çünkü her döngü yinelemesi için 500 baytlık bir yapı kopyasını çıkarsanız bile, üzerinde tek bir değer olup olmadığını kontrol edebilirsiniz, kod hala tamamen işlevseldir. Bu nedenle, birim testleriniz bile, kötü kodun bu basit ve masum görünümlü otomobilin arkasına saklandığını fark etmenize yardımcı olmaz. Dosyayı tarayan diğer çoğu kişi de ilk bakışta dosyayı göremez.
Türün ne olduğunu bilmiyorsanız, bu durum daha da kötüleştirilebilir, ancak ne olduğu hakkında yanlış bir varsayım yapan değişken adı seçersiniz, aslında 1a ile aynı sonucu elde etmek yerine, en baştan değil post-refactor.
- İlk yazarken kodu yazmak, programlamanın en çok zaman alan parçası değildir. Evet, otomatik olarak başlangıçta bazı kodların yazılmasını hızlandırır. Yasal uyarı olarak,> 100 WPM yazarım, bu yüzden belki de diğerleri kadar beni rahatsız etmiyor. Ama tek yapmam gereken bütün gün yeni kod yazmak olsaydı mutlu bir kampçı olurdum. Programlamanın en çok zaman alan kısmı, koddaki çoğaltılması zor, kenardan-küçük hataların teşhisidir; bu, genellikle belirgin olmayan açık sorunlardan kaynaklanır - örneğin, otomatik kullanımın aşırı kullanımı gibi (referans-kopya, imzalı, imzasız, int, bool, işaretçi vb.
Auto'nun standart kütüphane şablonu türleriyle korkunç bir sözdizimi için geçici bir çözüm olarak getirildiği bana açıkça görülüyor. İnsanların zaten aşina oldukları şablon sözdizimini düzeltmeye çalışmak yerine - ki, bozulabilecek varolan kodun tümü nedeniyle yapmak neredeyse imkansız olabilir - sorunu temelde gizleyen bir anahtar kelimeye ekleyin. Esasen "kesmek" olarak adlandırdığınız şey.
Aslında standart kütüphane konteynırları ile otomatik kullanımı konusunda herhangi bir anlaşmazlık yok. Anahtar kelimenin ne için yaratıldığı açıktır ve standart kütüphanedeki işlevlerin amaç olarak (veya bu konu için yazdığınız) temel olarak değişmesi muhtemel değildir, bu da otomatik olarak kullanımı güvenli hale getirir. Ancak, kendi kodunuzla ve çok daha değişken olabilecek ve potansiyel olarak daha temel değişikliklere tabi olabilecek arabirimlerle kullanma konusunda çok dikkatli olurdum.
Dilin kabiliyetini artıran bir diğer otomatik uygulama tipi ise agnostik makrolarda geçici değerler oluşturmaktır. Bu daha önce gerçekten yapamayacağın bir şey, ama şimdi yapabilirsin.
auto
Zaten çoğu zaman okunması zor olan şeyleri okumayı zorlaştırır, yani çok uzun, fonksiyonlar çok az adlandırılmış değişkenler, vb.