Konunun Tarihçesi:
Dinamik tipler Python'un ilk sürümlerinden itibaren vardır. Bu, değişkenlerin önceden belirli bir veri türüne bağlı olmaması anlamına gelir, Java veya C++ gibi dillerin aksine. Tip, çalışma zamanında belirlenir.
Sorun:
Başlıca zorluk, tiplerin açık kontrolünün kaybıdır. Bu, kod yazma aşamasında hata bulmayı zorlaştırır ve özellikle kodu ölçeklendirirken çalışma zamanında mantıksal hatalara neden olabilir.
Çözüm:
Python bu sorunu duck typing (bir nesne ördek gibi davranıyorsa, o bir ördektir) ve tip anotasyonları (type hints) ile çözer. Ancak anotasyonlar zorunlu değildir ve sadece dış araçlar tarafından kontrol edilir, yürütme sırasında değil.
Kod örneği:
x = 42 # int x = "foo" # şimdi bir string def process(val): return val + val print(process(5)) # 10 print(process("ha")) # haha
Temel özellikler:
Bir değişkeni önce bir liste gibi, sonra bir sayı gibi aynı kod bloğunda kullanmak mümkün mü ve bu bir sözdizim hatasına yol açar mı?
Mümkün — bir sözdizim hatası olmayacak. Hata sezdirmeden yeni tip ile geçersiz bir işlem yapılmaya çalışıldığında meydana gelecektir.
x = [1, 2, 3] x = 5 # print(x[0]) # Bu çağrıda hata olacaktır
Python'da type hint değişkenin her zaman belirtilen türe sahip olacağını garanti eder mi?
Hayır — type hint sadece bir ipucudur, yorumlayıcı bunu kontrol etmez. Tipleri sadece linters ve mypy kontrol edebilir.
def foo(x: int) -> int: return x + 1 foo("string") # çağrıya kadar hata olmayacak
Fonksiyon tipi de dinamik midir? Fonksiyonun imzasını çalışma zamanında değiştirmek mümkün mü?
Fonksiyon, birinci sınıf bir nesnedir. Onun tipi yeniden tanımlanabilir, ancak imza değiştirilemez (yeni bir fonksiyonla değiştirilebilir).
def f(): return 5 f = lambda: "abc" print(f()) # 'abc'
Olumsuz Vaka
Bir projede fonksiyonun giriş parametrelerinin tipi kontrol edilmediği için, kullanıcı formlarından gelen veriler string biçiminde geliyordu ve bu verilerle sayılar gibi çalışılıyordu. Üretimde tahmin edilemeyen hatalar ortaya çıkıyordu.
Artılar:
Hızlı prototipleme, kısa fonksiyonlar, az boilerplate.
Eksiler:
Hataları ayıklamak zor, hatalar en beklenmedik yerlerde ve yalnızca belirli verilere bağlı olarak ortaya çıkar.
Olumlu Vaka
Type hints ve mypy kullanarak statik tip doğrulaması ile sorunlar, produksiyona geçmeden önce CI/CD aşamasında tespit edildi.
Artılar:
Potansiyel sorunların erken tespiti, kodun kolay bakımını sağlama.
Eksiler:
Ek kontrol için zaman harcanır, bazen biraz fazla kod eklenebilir.