Programlama dilleri neden dönüş türüne bakılmaksızın yöntem imzaları üretir?


11

Dönüş türüne dayalı bir yöntem imzası oluşturmayan birçok dille çalıştım. Ben de bir (belki bazı?) İle çalıştım. Geçmişte bana sorun vermeyenler ( burada olduğu gibi ). Programlama dilleri neden dönüş türüne bakılmaksızın yöntem imzaları üretir?

Güncelleme: Özellikle derlenmiş statik olarak yazılmış dillerden bahsediyorum


Bu çok temelsiz bir tahmin, ama derleyici uygulaması ve / veya araç desteği zorluğu ile ilgili bir şey olduğunu tahmin ediyorum.
Charles Lambert

Haskell'de temel olarak dönüş türüne bağlı işlevleri yapmak için karakter sınıflarını kullanabilirsiniz. Haskell: D: D: D
Thomas Eding

Yanıtlar:


5

Tipleme ve tür hiyerarşileri ile iyi bir şekilde örtüşmez. Bir yöntemin A ve diğeri B türünü döndüren iki sürümünüz varsa, şu durumlarda sorun yaşarsınız:

  • A veya B, birbirlerinin alt türleridir ve dönüş değerini süpertip olana atarsınız.
  • A ve B'nin ortak bir üst tipi vardır ve böyle bir üst tip değerine atarsınız.

Bunu atmalarla halledebilirsiniz, ancak bu işlevlerden birini yeniden adlandırmak kadar çok yazmayı gerektirir. Çağrı belirsiz olduğunda da bir derleyici hatası kaydedebilirsiniz, bu durumda kullanıcının benzer çaba harcaması gerekir.


1
İmzadaki dönüş türünü içeren dillerle çalıştım. Her yerde döküm yapmak, belirttiğiniz gibi bir sorun değildir. Özel örneğinizde, bu durumları çevirerek almanıza gerek yoktur. A ve B'nin (C alt tipleri) her ikisi de aynı işleme sahipse, C olarak bildirilmelidir. Dönüş türü A için B'den farklıysa: Çoğu durumda C'nin bir alt türünü döndürmeye çalışır. alt türüne alt türü döndüren başka bir yöntem ekleyin ve sürümü belirli alt türüne sahip olanı çağırmak için C'den uygulayın. Artık her yere dökmeniz gerekmiyor.
Charles Lambert

@Charles Lambert: Bu A, B veya C sınıfları üzerinde bir işlem değil. Aynı isim ve parametre listesine sahip, biri A tipi bir şey diğeri B tipi bir şey döndüren iki işlev. Bu soru geçerlidir OOP sistemlerinden daha fazlası için, genel tiplere ve fonksiyonlara dayanarak cevap verdim. Ayrıca, rebuttal örneğinizin neyi başarmayı amaçladığını anlamıyorum; yanıt vermem için daha fazla ayrıntı gerekiyor.
jprete

Bir yorum bir örnek için çok kısa. pastebin.com/JR39PKs0 temel olarak imzaya dönüş türü içeren diller zaten açıkladığınız sorunu hafifletmenin yollarını bulmuştur. İster kodlama kuralı, ister standart uygulama olsun. Ayrıca, yazdığınız şeylerin çoğu, yalnızca dönüş türünde farklılık gösteren yöntemler oluşturmayı gerektirmez. Yine, bununla çok sık
Charles Lambert

Herhangi bir bağımsız değişken imzası için yalnızca bir "birincil" yöntemin bildirilebileceğine dair bir kurala sahip olmakta zorluk yaşanıyorsa, ancak rasgele sayıda ikincil yöntem bildirilebiliyordu ve bir derleyici, önce bir bağımsız değişken imzası tanımlayarak birincil yöntem var ve sonra böyle bir yöntemin açık bir şekilde daha iyi bir eşleşme olup olmadığını görmek için ikincil yöntemleri belirli bir sırayla kontrol etmek (veya birincil yöntem olmasa bile kullanılabilir)?
supercat

3

Çünkü bir yöntemi çağırabilir ve sonucunu atayamazsınız.


3
Her dilde değil.
Jörg W Mittag

@Jorg Hangi dil gibi?
Chiron

1
f # bir dildir. Yaygın olarak foo -> ignore'un görmezden geldiği durumlarda görmezden
Charles Lambert

Ada daha iyi bir örnek. Bu dil aslında imzanın bir parçası olarak dönüş türlerini kullanır.
Charles Lambert

-4

Temel kural: kuvvetle yazılan diller genellikle yöntem imzasını bir dönüş türüne bağlar. Zayıf yazılan diller yoktur.
C # bilmiyorum, ama sorunun C # jenerikleri işleme yolu nedeniyle olabileceğini varsayıyorum. Genel yöntem için tamamen farklı bir yöntem yaratıyor olabilir, bu durumda bunlar gerçekten iki farklı yöntemdir.


1
Bu güçlü yazılan dillerden hangisine atıfta bulunduğunuzu merak ediyorum. Ben hiçbirini bilmiyorum ve C ++ açıkça dönüş türüne çözüm yasakladı biliyorum.
greyfade

2
-1 Eğer onu ihlal eden tek bir örnekle görünüşte yanlış olan bir başparmak kuralı verecekseniz, bunu kuralın uygulandığı diğer tüm örneklerle izlemelisiniz.

@greyfade, benim açımdan zayıf yazılan dillerde ödevin derleme zamanında kontrol edilmemesiydi. Katılıyorum, bu burada geçerli olmayabilir.
CMR

Demek istediğin nokta, "güçlü yazılan diller genellikle ... bir dönüş türüne bağlanır" şeklinde yanlış iddian ile belirsizleşiyor.
greyfade
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.