Yazan : Şadi Evren ŞEKER

İçerik:
Sabit tip bağlamaları (Static Type Binding)
Hareketli Tip Bağlamaları (dynamic type binding)
Tip çıkarımı (Type inference, Şekil istidlali)

Programlama dillerinde bir değişkenin tipinin belirlenmesi iki türlü olabilir. Birinci tip tanımlamada değişkenin tipi sabit olarak atanır ve bir kere belirlendikten sonra değişmez (static binding). İkinci tip tanımlamada ise değişkenin tipi değişebilir (dynamic binding).

Bu tanımlama tiplerine geçmeden önce açıktan ve gizli bağlama şekillerine bakalım.

Sabit tip bağlamaları (Static Type Binding)

Şayet değişkenin (variable) tipi açıkça tanımlanıyor ve programcı tarafından belirleniyorsa bu tip tanımlamalara açıktan tanımlama (explicit decleration) şayet açıkça belirtilmiyor ancak içerisine konulan verinin tipine göre belirleniyorsa bu tip tanımlamalara da gizli bağlama ile tanımlama (implicit decleration) ismi verilir.

Örneğin

int x; // C,C++,JAVA veya C# gibi dillerde

tanımlamasında x değişkeninin tipi açıkça belirtilmiş ve tam sayıları (integer) alabileceği söylenmiştir. Buna mukabil:

var x; // javascript

dim x; ‘visual basic

tanımlamasında x isminde bir değişken tanımlanmış ancak tipi belirsiz bırakılmıştır.

Örneğin FORTRAN dilinde I, J, K, L, M veya N harfleriyle başlayan değişkenler tam sayı (integer) ve diğer bütün tanımlamalar ise reel sayı olarak belirlenmiştir ve içsel olarak bu tanımlanma kendiliğinden yapılmış programcının bir tanımlama yapmasına gerek bırakılmamıştır.

Benzer şekilde PERL dilinde bazı özel semboller ile değişken tipleri belirlenir. Örneğin $ sembolü ile başlayan bir değişken sabit bir sayı tutabilir (scalar) buna karşılık @ sembolü ile başlayan değişkenler dizilerdir (arrays) yine benzer şekilde % işareti ile başlayan değişkenler ise özet değerleri (hashing) tutmaktadır.

Hareketli Tip Bağlamaları (dynamic type binding)

Yukarıda açıklanan sabit bağlamalara (static binding) karşılık değişken bağlamalarda (dynamic binding) değişkenin (variable) tipi atandıktan sonra değişebilir.

Yani yukarıda açıktan (explicit) veya kapalı (implicit) olarak tip belirlendikten sonra değişememektedir. Örneğin

int x;

tanımından sonra x değişkeninin değeri tamsayı olmaktadır.Veya

var x;

x=3;

satırlarından sonra x değişkeninin içerisine konulan değer tamsayı olduğu için değişken değeri bu şekilde kalmaktadır.

Buna karşılık hareketli bağlamalarda (dynamic binding) tip bir kere atandıktan sonra değişebilir. Örneğin:

bilgi =  { 2 , 3 , 4 };

şeklindeki bir tanımla bilgi ismindeki değişkene bir dizi konulmuştur. Bu durumda bilgi değişkeninini bir dizi olduğu sonucuna varılır ve tipi bu şekilde atanır. Ancak yukarıdaki satırdan sonra aşağıdaki şekilde bir satır gelirse:

bilgi = “ali”;

bu durumda değişkenin tipi dizgi (string) olarak yeniden atanmış olur ve bu satırdan sorna bu değişken üzerinde yapılan işlemler dizgi (string) işlemleri olarak kabul edilir.

Tip çıkarımı (Type inference, Şekil istidlali)

Miranda, Haskell ve ML gibi programlama dillerinde fonksiyonların tip çıkarımı yapması durumudur.

Örneğin ML dilinde aşağıdaki örneği ele alalım:

function alan (r) : 3.14 * r * r;

Yukarıda r yarıçapında bir dairenin alanını hesaplayan fonksiyon verilmiştir. Bu fonksiyonda dönen değerin tipi reel sayı olacaktır çünkü fonksiyon içerisinde 3.14 gibi reel bir sayı ile çarpım yapılmıştır.

İşte bu noktada programlama dili, fonksiyonun içeriğinden bir çıkarım yapmaktadır.

ML programlama dilinde çıkarım yapılamayan durumlarda programcının bir tipi elle belirtmesi istenir. Örneğin:

function carp(x): x * x;

yukarıdaki fonksiyonda x değerinin tipi bilinmediği için ve fonksiyonun dönüş tipi tahmin edilemeyeceği için programcının fonksiyonu aşağıdaki şekilde yazması gerekir:

function kare(x): int = x * x;

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir