Statik tip sistemler, verilerin yanlış kullanımının önlenmesi ile ilgilidir.
Bunu yapan bariz tür örnekleri var:
- bir UUID ayını alamazsın
- İki dizgiyi çarpamazsınız.
Daha ince örnekler var
- masanın uzunluğunu kullanarak bir şey için ödeme yapamazsınız
- Birinin adını URL olarak kullanarak bir HTTP isteği yapamazsınız.
double
Hem fiyat hem de uzunluk için kullanmak isteyebilir veya string
hem isim hem de URL için a kullanabilirsiniz . Ancak bunu yapmak, müthiş tip sistemimizi altüst eder ve bu yanlış kullanımların dilin statik kontrollerini geçmesini sağlar.
Pound-saniye Newton-saniye ile karıştırılmak çalışma zamanında kötü sonuçlar doğurabilir .
Bu, özellikle dizelerde bir sorundur. Sık sık "evrensel veri türü" olurlar.
Öncelikle bilgisayarlarla arayüzleri metinlendirmeye alışkınız ve sıklıkla bu insan arayüzlerini (UI) programlama arayüzlerine (API) genişletiyoruz . Biz karakter olarak 34.25 düşünmek 34.25 . 05-03-2015 karakterleri olarak bir tarih düşünürüz . Bir UUID'yi 75e945ee-f1e9-11e4-b9b2-1697f925ec7b karakterleri olarak düşünüyoruz .
Ancak bu zihinsel model API soyutlamasına zarar vermektedir.
Sözler veya dil, yazıldığı veya söylendiği gibi, düşünce mekanizmamda hiçbir rol oynamıyor gibi görünüyor.
Albert Einstein
Benzer şekilde, metinsel gösterimler tür ve API tasarımında hiçbir rol oynamamalıdır. Dikkat string
! (ve diğer aşırı genel "ilkel" türler)
Tipler “işlemlerin ne anlama geldiğini” iletir.
Örneğin, bir keresinde bir istemcide bir HTTP REST API'si için çalıştım. REST, uygun şekilde yapıldığında, ilgili varlıklara işaret eden köprülere sahip olan hiper medya varlıkları kullanır. Bu müşteride, yalnızca yazılan varlıklar değil (örneğin, Kullanıcı, Hesap, Abonelik), bu varlıklara bağlantılar da yazılmıştır (UserLink, AccountLink, SubscriptionLink). Bağlantılar etrafındaki sarmalayıcılardan biraz daha fazlaydı Uri
, ancak ayrı türler bir Kullanıcı almak için bir AccountLink kullanmayı denemeyi imkansız hale getirdi. Her şey çok açık olsaydı Uri
, hatta daha da kötüsü string
olsaydı , bu hatalar yalnızca çalışma zamanında bulunabilirdi.
Aynı şekilde, sizin durumunuzda, yalnızca bir amaç için kullanılan verilere sahipsiniz: tanımlamak için Operation
. Başka bir şey için kullanılmamalı ve Operation
oluşturduğumuz rasgele dizelerle s tanımlamaya çalışmamalıyız. Ayrı bir sınıf oluşturmak, kodunuza okunabilirlik ve güvenlik sağlar.
Tabii ki, tüm iyi şeyler aşırı kullanılabilir. Düşünmek
kodunuza ne kadar netlik kattığını
ne sıklıkla kullanıldığı
Bir "veri tipi" (soyut anlamda) sık sık, farklı amaçlar için ve kod arayüzleri arasında kullanılıyorsa, ayrıntıya düşme pahasına, ayrı bir sınıf olmak için çok iyi bir adaydır.