Kullanabileceğiniz yerde ‘const’ kullanın

Geliştirdiğim uygulamalarda const kullanmadığımdan dolayı başımın ağrıdığı çok oldu. Yanlışlıkla aldığı dinamik parametrenin değerini değiştiren fonksiyonlar falan yazdım. Bu yazıda ‘const’ kullanmanın önemine değineceğim.

Öncelikle ‘const’ kullandığımızda aslında iki iş yapmış oluyoruz. Birincisi derleyicimize “bu sabit bir değer değiştirilmesine izin verme” demiş oluyoruz, ikincisi eğer bir ekipte çalışıyorsak diğer programcılara bu değerin sabit kalması gerektiğini söylemiş oluyoruz.

‘const’ keyword’ü son derece esnek bir keyword. Sınıfların dışında, global değişkenler, static objeler için kullanabilirken sınıflar içinde static ve static olmayan member’lar için kullanabiliyoruz.
Pointerlar içinse; pointer’ın kendisini const ya da gösterdiği veriyi const yapabiliriz.

int *p = 1;
const int *p = 1; //const veri
int * const p = 1; // const pointer
const int * const p = 1; // const pointer, const veri

Bir de benim de kafamı karıştırmıştı yeri gelmişken pointer tanımlanmasıyla ilgili Scott Meyers’ın Effective C++ kitabında bahsettiği bir olay var.

class Vector2D { ... }
void f1(const Vector2D *p); // birinci ifade
void f2(Vector2D const *p); // ikinci ifade

Burada birinci ve ikinci ifadeler tamamen aynı, const’un yerini farklı gördüğünüzde kafanız karışmasın.

Yazının başında bahsettiğim gibi ‘const’u ben en çok fonksiyon tanımlamalarında kullanıyorum. Örneğin yazdığınız fonksiyonun const bir value dönmesi, parametrelerini const olarak alması hem sizin programınızı geliştirirken hata yapma ihtimalinizi çok azaltır, hem programınız başkaları tarafından kullanılmaya başlandığında güvenliği daha yüksek bir program yazmış olursunuz.
Örneğin yazdığım bir oyunda bölüm bilgisini okuyan fonksiyonumu

Level* LevelParser::parseLevel(const char *levelFile);

şeklinde tanımladım. Böylece parse edilmesi için gönderdiğim bilginin değişmediğinden emin olabiliyorum.
Const parametreleri const değerlerden ayıran birşey yok. İkisi de basit olarak değiştirilemeyen değerler, const neyse o.
Fonksiyonun return değerini const yapmak içinse

const int fonksiyon(const int *a, const int *b);

şeklinde fonksiyon tanımının başına const yazabiliriz.

Etiketler:

Bir Cevap Yazın