Haftalık C++ 3 – if/switch ilklendirme ifadeleri

Bu yazımda, C++ 17 ile gelen ve değişkenlerin tanımlı olduğu kapsamları kısıtlamamıza yardımcı olacak yeni bir kapsam mekanizmasından bahsedeceğim. Bildiğiniz gibi, tanımladığınız değişkenlerin kapsamlarını olabildiğince küçük olacak (yani geçerli olduğu kapsamı azaltmak) şekilde tanımlamak tavsiye edilen bir yöntemdir.

Değişkenleri olabildiğince küçük bir kapsam içerisinde ve ilk kullanıma yakın tanımlayın.

Peki neden? Her ne kadar çoğu derleyici siz değişkeni tanımlayıp kullanmadığınızda sizi uyarsa da, her bir değişken tanımladığı kapsamı kirletmekte ve daha iç kapsamlardaki aynı isimli değişkenleri örtebilir (buna ayrıca gölgeleme veya isim gizleme de denir). Bundan daha da önemlisi bu tarz tanımlamalar kodun karmaşıklığını arttırmakta ve onu daha az okunur, idamesi zor bir hale getirebilir. Aşağıda bu durumu gösteren çok basit bir örneği görebilirsiniz:

Yukarıdaki kullanım yerine, aşağıdaki kod kullanılmalıdır.

C++ 17 ile birlikte bu tarz kapsam kısıtlamayı kolaylaştıran “ilklendirmeli if/switch ifadeleri” mekanizması dile eklendi. Aşağıdaki standarda ilişkin kaynakta bu mekanizmaya ilişkin detayları bulabilirsiniz.

For ifadelerine benzer şekilde, if/switch parantezleri içerisinde sadece bu ifadelere ilişkin bloklar (if/else, switch/case) içerisinde geçerli olacak ilklendirmeleri tanımlayabiliyorsunuz. Aşağıda geleneksel ve yeni yaklaşımı görebilirsiniz:

Bu mekanizmaya ilişkin başka bir örnek kullanıma bakalım hele:

Bu mekanizmanın bir diğer yaygın kullanımı konteynerler ile kullanılan iteratörler ile oluyor:

Aşağıda da normalde çok çirkinleşebilecek bir kodun nasıl sade bir hale gelebileceğini göreceksiniz:

Bu mekanizma ayrıca kritik alanlarda kilitleme için de kullanılabilir:

Son olarak, özellikle çıktı parametreleri içeren API’lere için de bu mekanizma aşağıdaki gibi kullanılabilir:

Bu mekanizmaya ilişkin bir diğer kullanım daha var ama onu da inşallah yeni bir C++ 17 özelliği olan “structured binding” ‘i aktaracağım haftalık C++ yazıma saklıyorum.

O vakte kadar, kendinize iyi bakın!

Kaynaklar

Bir cevap yazın

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.