SORU
4 Kasım 2008, Salı


Denkliği nedir?

Ne demek "tür-güvenli" demek?

CEVAP
4 Kasım 2008, Salı


Tipi emniyet derleyici eğer bir değişken için yanlış türü atamak denerseniz derleme ve bir hata atmak ise türleri doğrulamak anlamına gelir.

Bazı basit örnekler:

// Fails, Trying to put an integer in a string
String one = 1;
// Also fails.
int foo = "bar";

Bu da onları açık tip geçirmeden beri yöntem bağımsız değişkenleri için de geçerlidir:

int AddTwoNumbers(int a, int b)
{
    return a   b;
}

Eğer bunu kullanarak aramayı denedim:

int Sum = AddTwoNumbers(5, "5");

Derleyici bir dize taşıyorum çünkü bir hata atmak olacaktır ("") 5, ve bir tamsayı bekliyor.

Gevşek yazılmış bir dil, javascript gibi aşağıdakileri yapabilirim:

function AddTwoNumbers(a, b)
{
    return a   b;
}

eğer ararsam bu gibi:

Sum = AddTwoNumbers(5, "5");

Javascript otomatik olarak bir dize için 5 dönüştürür ve "verir". 55 Bu dize birleştirme işareti kullanarak javascript kaynaklanmaktadır. Bu tür bilinçli yapmak gibi bir şey yapmak gerekir:

function AddTwoNumbers(a, b)
{
    return Number(a)   Number(b);
}

Ya da, muhtemelen:

function AddOnlyTwoNumbers(a, b)
{
    if (isNaN(a) || isNaN(b))
        return false;
    return Number(a)   Number(b);
}

eğer ararsam bu gibi:

Sum = AddTwoNumbers(5, " dogs");

Javascript otomatik olarak bir dize için 5 dönüştürür ve onları ekler, geri dönmek için "5 köpek".

Tüm dinamik dil olarak bağışlayıcı olarak javascript (aslında dinamik bir dil değildir implicity ima gevşek bir yazılı dil (bkz: Python)) bazıları gerçekten size bir çalışma zamanı hatası geçersiz tip döküm.

Uygunsa devam ederken, kolayca cevapsız hatalar bir sürü kadar açılır, ve sadece çalışan programın test tarafından belirlendi. Şahsen, benim derleyici eğer bu hata mı yaptım diye söylemesini tercih ederim.

Şimdi, geri C#...

C# dili destekler bir özellik, örneğin bir alt türü için temel bir tür yedek ve bir hata neden olabilir anlamına gelir bu covariance,,:

 public class Foo : Bar
 {
 }

Burada, Bar, alt sınıflar yeni bir sınıf (Foo) yarattım. Şimdi bir yöntem oluşturabilirsiniz:

 void DoSomething(Bar myBar)

Ve ya bir Foo veya bağımsız değişken olarak bir Bar kullanarak çağrı, hem de bir hata vermeden çalışacaktır. Bu C için çalışır# Bar herhangi bir alt sınıf Bar. arabirim uygulayan bilir

Ancak, tersini yapamaz:

void DoSomething(Foo myFoo)

Bu durumda, yapamam derleyici Bar uygular Foo arayüzü olduğunu bilmez, çünkü bu yöntem için Bar geçirir. Bu çocuk bir sınıf (ve genellikle) üst sınıf daha farklı olabilir çünkü.

Tabii ki, şimdi asıl soruya kapsamında, ama biliyorum:) onun tüm iyi şeyler ötesinde öfkelenmek ve gittim

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • majesticdubstep

    majesticdubs

    3 Kasım 2011
  • Project Mooncircle

    Project Moon

    6 Aralık 2009
  • RawBrahs

    RawBrahs

    28 Aralık 2010