Zayıf yazarak vs Güçlü

4 Cevap php

Bir zayıf-yazdığınız dil çünkü onu anlamak yolu, şu PHP izin verilir.

$var = 'Hello';
$var = 5;

Ben sadece Python 2.6 bir Windows sürümü yüklü ve ben sadece bana böyle tipini değiştirmenize izin DEĞİL bekliyordum, ama yukarıdaki kod Python eşdeğer sadece Zebra PHP gibi çalışıyor!

>>> var = "Hello"
>>> type(var)
<type 'str'>
>>> var = 5
>>> type(var)
<type 'int'>

Zayıf / güçlü yazma benim anlayış kusurludur?

4 Cevap

Sizin örnek dynamic yazarak, zayıf değil yazarak gösterir. Dinamik yazarak genel bir nesne saklayabilirsiniz veri tipi değişken olduğu anlamına gelir; herhangi bir hedef nesnenin her türlü bağlayıcı bir tutabilir. Kontrast ile, diyelim ki, statik olarak yazılır C #, [*].

int i = 5; // Okay.
i = "5";   // Illegal! i can only hold integers.

Güçlü yazarak bir kez belirli tür bir değer atanmış demektir, nesneler, çeşitli diğer nesnelerle etkileşim konusunda katı kurallara uymak. Zayıf yazarak gibi kurallar daha rahat olduğu anlamına gelir. Bu kesinlikle yazdığınız dilde herhangi bir şekilde mutlaka üstün olduğu anlamına gelmez; sadece bir dil tasarım seçimdir.

Python nesneleri olduklarını yazdıklarınız ayrı bir kavram var, çünkü güçlü yazılmış olarak kabul edilir. Nesneler arasındaki uyumsuz işlemler hatalara neden:

>>> 1 + 1          # Add two integers.
2
>>> "1" + "1"      # Concatenate two strings.
'11'
>>> 1 + int("1")   # Add two integers.
2
>>> "1" + str(1)   # Concatenate two strings.
'11'
>>> 1 + "1"        # Undefined! Adding integers and strings is meaningless.
Traceback (most recent call last):
  File "", line 5, in ?
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Ama PHP, kurallar çok daha rahat kabul edilebilir ne üzeresiniz. Böylece bazı diğer dillere göre daha yazdığınız daha zayıf olarak kabul edilir.

$x = 1 + "1"; // x is 2

[*] Teknik, C # 4 gibi, C # statik olarak yazılan ama bir bağlama başına bazında opt-in dinamik yazarak, dynamic anahtar kelime sayesinde. Dil bir sürü bu gün dinamik yetenekleri ekleyerek ve hatları bulanıklık, bu nedenle "dil X dinamik" ve "dil Y statik" olduğunu söylemek için giderek daha zor oluyor edilir. Bu ikili bir özellik daha bir skalaya veya bir yelpazenin çok daha fazla bulunuyor.

Zayıf yazarak veya güçlü yazarak gerçek tanımı yok. Onun bütün örtülü türü dönüştürme hakkında ve statik / dinamik yazarak ile ilgisi yoktur.

Java gibi bir statik olarak yazılan dil can zayıf (ki öyle değil) yazılmalı, ve PHP gibi dinamik yazdığınız dil can kuvvetle (öyle değil) girilmelidir.

Bir zayıf yazılı dil veri türleri bazı operasyonlarda karışık olabilir ne daha liberal olduğunu.

One addition the the first answer: It's a tad more complicated because in python the + operator is overloaded meaning it would both add (math) and concatenate (glue two strings). In the php example

$i = 1 + "1" // $i == 2

artı, çünkü (matematik) ekler. (Nokta) Birleştirme için kullanılır, bu yüzden php

$i = 1 . "1" // $i == "11"

Ne açık yapmaya çalışıyorum olduğunu kendi şekilde bu her zayıf yazılı / dinamik dil ilgilenir.

Evet. O statik / dinamik yazıyor, güçlü / zayıf yazarak değildir. Zayıf yazarak gibi 5 + '5' gibi şeyler 10 eşit verir.