Daniel Spiewak'ın bu konuşmasını , Scala'nın ve Java'nın nominal yazımıyla karşılaştırıldığında yapısal yazmanın avantajlarından bahsettiği yerde izledim . Bu fark için bir örnek aşağıdaki Java kodu olacaktır
public interface Foo {
public int length();
}
public interface Bar {
public int length();
}
Foo f = ...;
Bar b = f;
tabii ki bunlar arasında tür uyumluluğu olmadığı Foo
ve Bar
isimle belirlendiği için derlenmeyecektir .
Öte yandan yapısal bir tip sistem, her iki tipin de eşit veya uyumlu olduğunu ilan edebilir ve bu nedenle, diğer şeylerin yanı sıra, kontrol edilen ördek tipine izin verebilir.
Şimdi yapısal bir tip sistemin avantajlarının çoğunu anladığımı düşünüyorum, ancak aşağıdaki gibi örneklerden tür güvenliğini geçersiz kılmayacağını merak ediyorum
class Foo {
class Bar { /* ... */ }
def takeBar(b: Bar) = { /* ... */ }
def getBar: Bar = new Bar
}
val foo1 = new Foo
val foo2 = new Foo
foo1.takeBar(foo1.getBar) // should compile
foo1.takeBar(foo2.getBar) // should not compile
Anlayışım, yapısal bir tip sistemde son satırın da derleneceği ve eğer öyleyse, bu tür güvenlik açısından bir dezavantaj olmayacağı doğru mu?