0% found this document useful (0 votes)
20 views59 pages

SWD Variables Chapter7

Uploaded by

berk38779
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views59 pages

SWD Variables Chapter7

Uploaded by

berk38779
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd

Software

Construction
Yazılım İnşası
Sedat Görmüş, PhD
Email : sedatgormus@[Link]
: sedatgormus@[Link]
Değişkenleri Nasıl Kullanmalıyım?
İçerik

• Veri Okur Yazarlığı


• Değişken tanımlamayı kolaylaştırmak
• Değişkenleri nasıl başlatırım(Initialisation)
• Scope (geçerlilik alanı)
• Binding Time
• Veri tipleri ile kontrol yapıları arasındaki ilişki
• Her değişkeni sadece bir amaç için kullanmak
Veri Okur Yazarlığı

• İşlevsel veri yaratmanın ilk adımı nasıl veri yaratacağınızı bilmektir.


• Geniş veri tiplerini içeren bir repertuara sahip olmak her iyi programcı için vaz
geçilmez olmalıdır.
• Şimdi bir test yapalım.
Veri Okur Yazarlığı
______ abstract data type ______ literal
______ array ______ local variable
______ bitmap ______ lookup table
______ boolean variable ______ member data
______ B-tree ______ pointer
______ character variable ______ private
______ container class ______ retroactive synapse
______ double precision ______ referential integrity
______ elongated stream ______ stack
______ enumerated type ______ string
______ floating point ______ structured variable
______ heap ______ tree
______ index ______ typedef
______ integer ______ union
______ linked list ______ value chain
______ named constant ______ variant
______ Total Score
Veri Okur Yazarlığı

0-14 Başlangıç
15-19 Orta
20–24 Uzman
25-29 Super Uzman
30-32 Yalancı Uzman
Değişken tanımlamayı kolaylaştırmak

• Implicit Tanımlamalar
• Bazı programlama dilleri değişkenleri otomatik olarak tanımlarlar
sizin için (Visual Basic).
• Bu tanımlama şekli bir çok programlama hatasına sebebiyet veren
bir yöntemdir.
• Bu nedenle, her değişkeninizi expilicit (ön tanımlı) olarak tanımlayın.
• Program yazarken derleyici izin veriyorsa implicit tanımlamaları
kaldırın
• Mesela Visual Basic Option Explicit komutuyla bütün değişkenleri
kullanmadan önce tanımlamanızı isteyecektir.
• En önemli programlama kavramı ‘Declare all variables’.
Değişken tanımlamayı kolaylaştırmak

• Bir isimlendirme yaklaşımı geliştirin


• Mesela musteriNo yada musteriNum gibi iki yaklaşımdan birini seçin
ve her rutinde aynı isimlendirme yaklaşımını kullanın.

• Değişken isimlerini kontrol edin


• Eğer derleyiciniz izin veriyorsa, rutinlerde kullanıla değişken
isimlerini listeleyin
• Eğer iki aynı değişken olması gereken iki farklı değişken fark
ederseniz (musteriNo, musteriNum), bu hataları düzeltin.
Başlangıç değerlerini değişkenlere
atamak
• Yanlış başlangıç değeri atama, programlamada yapılan en sık hatalardan
bazılarıdır.
• Bu problemleri ortadan kaldırmak debug ile harcanacak uzun zamanları
ortadan kaldıracaktır.
• Buradaki ana sorun eğer başlangıç değerini atamamışsanız ve başlangıç
değerinin beklediğiniz bir değer olduğunu varsayıyorsanız (0 gibi),
cehennemin kapılarını açmışsınız demektir.
• Eğer değişken hiçbir değer ile başlatılmamışsa, ilk değer o an hafızada
değişkenin bulunduğu lokasyondaki değerdir.
• Değişken bir ara başlangıç değeri almış ama bu değer şu an geçerli
olmayabilir.
• Değişken bir structure/sınıf ise kısmi bir değer ataması yapmış olabilirsiniz.
Olası başlangıç değeri atama
hatalarını önlemek
1. Her tanımlanan değişkene, tanımlandığı yerde başlangıç değeri ata.
Örnek:
char studentName [ NAME_LENGTH + 1 ] = {'\0'}; // full name of
student
2. Her değişkene kullanıldığı yere yakın bir noktada başlangıç değeri atayın.
Bazı diller tanım anında değer atamasını desteklemezler (örneğin: VB)
Dim accountIndex As Integer
Dim total As Double
Dim done As Boolean
accountIndex = 0
total = 0.0
done = False
...
' code using accountIndex
...
' code using total
...
' code using done
While Not done
Olası başlangıç değeri atama
hatalarını önlemek
• Daha iyi bir yaklaşım ise değişkenlere mümkün olduğunca kullanıldıkları
yere yakın bir yerde ilk değerlerini atayın.
Dim accountIndex As Integer
accountIndex = 0
' code using accountIndex
...
Dim total As Double
total = 0.0
' code using total
• İkinci örnek birinci örneğe göre daha sağlıklıdır.
• Sizce Bunun nedeni ne olabilir?
• Birincil neden eğer bütün değişkenlere aynı yerde başlangıç değerini
verirsek, bu değişkenlerin başka kod parçaları tarafından değiştirilme
riskini üstleniriz.
• Ayrıca, başlangıçta değer atamak o değişkenlerin bütün kodda kullanıldığı
intibasını verebilir.
• Ancak bu örneklerde bu doğru değildir.
Idealde değişkenleri tanımladığımız ve başlangıç
değerini atadığımız yer aynı yer olmalıdır.
• C++ ve JAVA buna izin verir.
• Örnek
• Java
• int accountIndex = 0;
• // code using accountIndex
• ...
• boolean done = false;
• // code using done
• while ( ! done ) {
• ...
Değişken tanımlamada dikkat
edilmesi gereken diğer hususlar
1. Sayıcı(counter) ve toplayıcı (accumulator) değişkenlerine özel
dikkat gösterin.

2. Sınıfın üye verilerini (member data) yapıcısında (constructor)


başlatın.

3. Tekrar başlangıç değeri (reset) yapma ihtiyacını göz önünde


bulundurun.

4. Sabit değişkenlerine (named constant) başlangıçta bir kez


başlangıç değeri atayın, değişkenleri ise kullanıldıkları yere
mümkün olduğunca yakın başlangıç değerini (initialize)
belirleyin.

5. Eğer varsa derleyicinin başlangıç değerlerini atamasını sağlayın


Değişken tanımlamada dikkat
edilmesi gereken diğer hususlar
1. Derleyicinin warning (uyarı mesajlarını) kullanarak hatalarınızı
azaltın.

2. Parametrelerin beklenen değerlerde olup olmadıklarını kontrol


edin (ASSERTION?)

3. Pointer operasyonlarını kontrol eden programlar kullanın (Örn :


valgrind)

4. Ayırdığınız hafıza parçasını bildiğiniz bir değere atayın (0, -1,


0xCC intel cpu, 0xDEADBEEF ☺)
Scope (Geçerlilik Alanı)

• Geçerlilik alanı değişkeninizin görülebilir ve tanımlı olduğu kod


bölgesini ifade eder.
• Örneğin
• if (x > y) {
• int z = x – y;
• }
• Burada z değişkeninin scope’u sadece if bloğunun içidir.
Scope’u nasıl kullanabiliriz?
1. Değişkenlerin referanslarını belli kod bölgesine hapsetmek (span).
• a = 0;
• b = 0;
• c = 0;
• a = b + c;
• Bu örnekte a değişkeninin span değeri 2 dir. Çünkü a değişkenine yapılan ilk
atamadan sonra ilk kullanıldığı noktaya kadar ifade sayısı ikidir.
• a = 0;
• b = 0;
• c = 0;
• b = a + 1;
• b = b / c;
• Burada ise b için span 1 ve 0 dır. Ortalama span ise 0.5tir.

• Değişkenlerin atandığı ve kullanıldığı noktaları yakın tutmak spanı


azaltacağı için kodun okunabilirliğini arttırır.
Değişkenlerin hayatta kaldıkları alan
• Ayrıca değişkenlerin hayatta kaldıkları alanı mümkün olduğunca
kısa tutun.
• Bu kodun okunurluğunu iyleştirecektir.
Örneğin Değişkenlerin yaşam süresi:
1 // initialize all variables
2 recordIndex = 0; recordIndex ( line 28 – line 2 + 1 ) = 27
3 total = 0;
4 done = false; total ( line 69 – line 3 + 1 ) = 67
...
26 while ( recordIndex < recordCount ) done ( line 70 – line 4 + 1 ) = 67
{
27 ... Ortalama yaşam süresi :
28 recordIndex = recordIndex + 1; ( 27 + 67 + 67 ) / 3 ≈ 54
...
64 while ( !done ) {
...
69 if ( total > projectedTotal ) {
70 done = true;
İyi yaşam süresi örneği
Scope’u küçük tutmak için iyi
yaklaşımlar
1. Döngülerde kullanılan • İyi Örnek
değişkenleri rutinin başında • int receiptIndex = 0;
değil döngüye en yakın
bölgede ilk değeri • float dailyReceipts = TodaysReceipts();
atanmalıdır . • double totalReceipts =
TotalReceipts( dailyReceipts );
2. Bir değişkene bir değer
atamayı hemen kullanıldığı
yerden önce yapın.
Scope’u küçük tutmak için iyi
yaklaşımlar
1. Birbiriyle ilişkili statementları gruplayın.

• Kötü Örnek • İyi Örnek


Binding Time (bağlanma zamanı)

• Bu kavram kodun değiştirilebilirliği • Örnekler


anlamında çok önemlidir. 1. [Link] = 0xFF;
• Kısaca değişken ve değerinin 2. // 0xFF is hex value for color blue
birbirine bağlandığı an olarak
tanımlanır. 1. Bu örnekte [Link]
değişkenine 0xFF değeri kodun
• Değişken ve değeri, derleme yazılması anında bağlanıyor.
anında mı, kodlama anında mı,
yoksa koşulma anında mı 2. Bu tehlikeli bir durumu ifade eder
birbirleriyle ibağlanır. çünkü, eğer bu 0xff değeri
değişirse aynı değerin kodda başka
• Her zaman mümkün olduğunca yerlerde de değişmesi lazım gelir.
başlama işlemi geç yapılmalıdır
(koşma zamanı) 3. Bu bilgi saklama anlamında da
kötü bir örnektir.
Binding Time (bağlanma zamanı)

• Bu kavram kodun değiştirilebilirliği • Örnekler


anlamında çok önemlidir. 1. [Link] = 0xFF;
• Kısaca değişken ve değerinin 2. // 0xFF is hex value for color blue
birbirine bağlandığı an olarak
tanımlanır. 1. Bu örnekte [Link]
değişkenine 0xFF değeri kodun
• Değişken ve değeri, derleme yazılması anında bağlanıyor.
anında mı, kodlama anında mı,
yoksa koşulma anında mı 2. Bu tehlikeli bir durumu ifade eder
birbirleriyle ibağlanır. çünkü, eğer bu 0xff değeri
değişirse aynı değerin kodda başka
• Her zaman mümkün olduğunca yerlerde de değişmesi lazım gelir.
bağlama işlemi geç yapılmalıdır
(koşma zamanı) 3. Bu bilgi saklama anlamında da
kötü bir örnektir.
Binding Time (bağlanma zamanı)

• Bu örnek ise derleme anında • Koşma zamanı (run time) bağlamaya bir
bağlamayı gösterir örnek
• private static final int COLOR_BLUE = • [Link] = ReadTitleBarColor();
0xFF;
• private static final int
• ReadTitleBarColor() bir dosyadan title bar
TITLE_BAR_COLOR = COLOR_BLUE;
pencere üğesinin değerini koşma
• ... zamanında okur.
• [Link] = TITLE_BAR_COLOR; • Bu kod oldukça rahat okunur ve esnektir.

• Buradaki kod da hard coded koda göre • Zira eğer işletim sistemi (windows)
çok daha okunabilir ve esnektir. pencere renklerinde bir değiştirme
yaparsa, bu değeri bir dosyaya (registry)
• Zira eğer TITLE_BAR_COLOR değeri yeterlidir.
değiştirilirse, bu programın tamamına
yansır.
Veri tipleri ile kontrol yapıları arasındaki
ilişki
• Veri tipi ile bu veriyi programlama sırasında kontrol eden
yepılar bağımlıdır.
• Ardışıl veri ardışıl kod tarafından kontrol edilir.
• Örneğin bir müşteri verisi ardışıldır ve bu veriyi okuyan kod
parçası da ardışıl olarak dizayn edilir.
• Koşullu veri if ve Case statementlarıyla ifade edilir.
• Eğer farklı tip çalışanlarınız varsa maaşlarını hesaplayan
program if ile çalışan tipini kontrol etmelidir.
• Tekrarlayan veri programda döngülere karşılık gelir.
• Mesela eğer T.C. Kimlik numaralarını bir dosyadan
okuyorsanız bu tekrarlayan bir iştir ve bir döngü yapısına
ihtiyaç duyar.
• Veriler ile onları kullanacak kontrol yapılarını anlamak
programcılığın öenmli aşamalarından biridir.
Her değişkeni sadece bir iş için
kullanmak
• Mümkün oldukça her değişkeni sadece bir iş için kullanmak programın
karmaşıklığını azaltmak için olmazsa olmaz bir kural olmalıdır.

• Günümüz bilgisayarlarında hafıza problemi geçmişe oranla daha az bir


sorun teşkil eder.

• Bu nedenle kodu yazarken mümkün olduğunca bir değişkene birden


fazla rol vermek ten kaçının.
Kötü bir örnek
Daha iyi bir örnek
Ek olarak

• Gizli anlamlı değişkenlerden kaçının


• Örneğin pageCount değişkeni basılan sayfa sayısını belirtiyordur.
• Ancak eğer -1 ise bir hatayı belirtecektir.
• Bu bir değişkene iki görev yüklemek olu ve yanlıştır.
• Zira page count hem mantıksal bir ifadeyi (-1 = Hata) ve hemde aritmetik bir
ifadeyi içerir.
• Ve her tanımladığınız değişkeni kullanın
• Bu her programcının sık sık yaptığı bir hatadır.
• Bazı derleyiciler C gibi bunu bir uyarı olarak bildirir.
Değişken isimlerinin gücü
İçerik

• İyi değişken ismi seçmek


• Spesifik veri tiplerini isimlendirmek
• Ortak isimlendirmek yaklaşımlarının gücü
• Informal isimlendirme yaklaşımı
• Standartlaştırılmış Prefixler
• Okunabilir kısa isimler yaratmak
• Asla kullanmamanız gereken değişken isimleri
İyi değişken ismi seçmek

• x nedir xx nedir??
• Aretha nedir?
• Kod ne yapıyor?

• Bu örneğin ne yaptığını anladınız mı?


• Bu kodun yukardakine eşit olduğunu düşününce aradaki farkı daha iyi
görebilirsiniz.
İyi ve kötü örnekler

Eğer küçük değişken isimleri kullanacaksanız scopelarını mümkün olduğunca


dar tutun
Spesifik veri tiplerini isimlendirmek

• Döngü kontrolleri: i,j,k (Bilgisayar töresi ☺)

• Ancak kompleks döngüler için daha uygun olanı (Okunurluk


açısından)
Spesifik veri tiplerini isimlendirmek

• Durum değişkenleri (Flag’tan


• Durum değişkenleri (Flag’tan
daha iyi bir isim belirleyin)
daha iyi bir isim belirleyin)

• Bunların hiçbiri yaptıkları iş


konusunda bize fazla bişey
demiyorç
Spesifik veri tiplerini isimlendirmek

• Temp değişkenler • Temp değişkenler

• Burada temp değişkeni • Burada discriminant değişkeni


kullanmak normal ama temp kullanmak daha fazla bilgi
bize çok bişey söylemiyorç veriyor.
Spesifik veri tiplerini isimlendirmek
Boolean
• done (bitti) değişkeniyle bir işlemin bittiğini belirtebilirniz (Örn, while(!
done){})
• error (hata) değişkeniyle bir işlem sırasında hata olduğunu
belirtebilirsiniz.
• found (bulundu) değişkeniyle bir işlem sırasında aradığınız değerin
bulunduğunu belirtebilirsiniz.
• success (başarı) değişkeniyle bir işlem sırasında bir işlemin başarılı
şekilde bittiğini belirtebilirsiniz.
• sourceFileAvailable, sourceFileFound diğer örnek boolean
değişkenler olabilirler.
• Bazı programcılar ise boolean değişkenlerin önüne is ifadesi koyarak
değişkeni soruya çevirirler. (Örneğin, is_done, is_error, is_found)
Spesifik veri tiplerini isimlendirmek
Enumerated Tipler
• Enum tiplerini kullanırken ön ekleri kullanmalısınız.
• Örneğin Color_, Planet_, yada Month_

• Örneğin (Visual Basic)


• Public Enum Color
• Color_Red
• Color_Green
• Color_Blue
• End Enum
• Örneğin C ++
• Enum planet{
• planet_earth,
• planet_mars,
• planet_venus
• };
Spesifik veri tiplerini isimlendirmek
Sabitler (Constants)
• C dilinde yada başka dillerde sabitler büyük harflerle isimlendirilmelidir.
• Örneğin:
• #define CYCLES_NEEDED 10
• #define MAX_ACCOUNT_NUMBER 100
• Eğer sabit bir değişken tanımlıyorsanız, standart isimlendirme yaklaşımı kullanabilirsiniz.
• Örneğin:
• const int max_account_number = 100;
İsimlendirme Yaklaşımı Niçin Gerekli

• Kodun stili projenin her yerinde aynı olursa, programcı kodlama stiliyle
zaman harcamadan arkadaşının kodunu değerlendirebilir.
• Projeler arasında geçiş yaptığınızda, yeni gördüğünüz değişkenleri daha
kolay anlayabilirsiniz. Bu da daha kolay yeni projeye entegre olmanıza
yardımcı olur.
• İsimlendirme yaklaşımının olmadığı durumlarda, aynı değişken yada
sabit için iki farklı isim kullanabilir ve bunu fark etmeyebilirsiniz.
(Örneğin, totalPoints v.s. pointsTotal)
• Ana nokta ise size düzenli ve tutarlı bir görünüm sergileyen kod
yazmanızda yardımcı olur.
İsimlendirme Yaklaşımı Ne Zaman
Gerekli
• Eğer birden çok programcı aynı projede çalışıyorsa

• Eğer programınızı başka bir programcıya deveretmeniz gerekiyorsa.

• Eğer programınız başka programcılar tarafından


denetleniyorsa(review).

• Programınız tek başına geliştirseniz bile geniş kod bloklarından


oluşuyorsa (Projenin tamamını beyninizde tutmanız mümkün değilse)

• Eğer projeniz belli bir süre boyunca dokunmayacağınız ve geri


döneceğiniz bir projeyse (Eğer isimlendirme yaklaşımı kullanmazsanız,
geri döndüğünüzde herşeyi unutmuş olduğunuzu farkedeceksiniz.

KESİNLİKLE İSİMLENDİRME YAKLAŞIMI KULLANMALISINIZ ve BUNU


TASARIM DOKUMANINA KOYMALISINIZ.
Informal isimlendirme yaklaşımı
• Değişken nesne isimler küçük harfle başlayabilir , rutin isimleri büyük harfle başlayabilir:
degiskenIsmi vs. RutinIsmi()
• Sınıf ve Instancelar (Class names v.s Objects)
• Widget widget; //Widget sınıfından türetilmiş widget nesnesi.
• LongerWidget longerWidget;
• Altenatif Sınıf ve Instance isimlendirme yaklaşımı
• WIDGET widget;
• LONGERWIDGET longerWidget;
• Altenatif Sınıf ve Instance isimlendirme yaklaşımı
• t_Widget Widget;
• t_LongerWidget LongerWidget;
• Altenatif Sınıf ve Instance isimlendirme yaklaşımı
• Widget aWidget;
• LongerWidget aLongerWidget;
• Yada nesneleri spesifik isimlerle sınıftan ayırt edebilirsiniz.
• Widget employeeWidget;
• LongerWidget fullEmployeeWidget;

NOT: Burada Widget Herhangi bir sınıfı temsil etmektedir.


Dil özelinde isimlendirme yaklaşımlar

C
• c ve ch karakter gösterir.
• i ve j indexleme için kullanılır
• n ile başlayan değişken bir sayı belirtir.
• p ile başlayan değişken bir pointer belirtir.
• s ile başlayan değişken bir string belirtir.
• Pre_processor makroları tamamen büyük harfle yazılır. Örneğin ASSERT
• Değişken ve rutin isimleri tamamen küçük harfle yazılır. Örneğin,
print_customer_report().
• Alt çizgi değişkendeki alt çizgi kelimeler arasında ayraç olarak kullanılır.
Dil özelinde isimlendirme yaklaşımları

C++
• i ve j indexleme için kullanılır
• p ile başlayan değişken bir pointer belirtir.
• Pre_processor makroları, sabitler ve kullanıcı tipleri tamamen büyük
harfle yazılır. Örneğin ASSERT, MAX_EMPLOYEE_NUM
• Sınıf isimleri Büyük ve küçük harflerin karışımından oluşur. Örneğin,
class EmployeeRecord{ ... };
• Değişken ve foksiyon isimleri küçük harfle başlar ve büyük ve küçük
harflerle devam eder. Örneğin, void printEmployeeRecord();
int employeeIndex;
• Alt çizgi sadece MAKROLARda kullanılmalıdır değişken isimlendirmeleri
için önerilmez.
Dil özelinde isimlendirme yaklaşımları

Java
• Pre_processor makroları, sabitler ve kullanıcı tipleri tamamen büyük
harfle yazılır. Örneğin ASSERT, MAX_EMPLOYEE_NUM
• i ve j indexleme için kullanılır
• Sınıf isimleri Büyük ve küçük harflerin karışımından oluşur. Örneğin,
class EmployeeRecord{ ... };
• Değişken ve foksiyon isimleri küçük harfle başlar ve büyük ve küçük
harflerle devam eder. Örneğin, void printEmployeeRecord();
int employeeIndex;
• Sınıf verisine erişen metodların önüne get ve set prefixleri konulur.
Örneğin getCustomerNumber().
Özet C++ ve Java İsimlendirme
Yaklaşımları
Özet C++ ve Java İsimlendirme
Yaklaşımları
İsimlendirmedeki Anahtar Noktalar

• İyi isimlendirilmiş değişkenler programın anlaşılabilirliği için


vazgeçilmezdir.
• Döngü indeksleri ve durum değişkenleri özel olarak üzerinde durulması
gereken değişken türleridir.
• Değişken isimleri mümkün olduğunca spesifik olmalıdırlar. Örneğin,
eğer yeni gelen müşterileri çeken bir rutin varsa
getCustomerRecords yerine getRecentCustomerRecods
denilebilir.
• Lokal, sınıf ve global veri için farklı isimlendirme yaklaşımları
geliştirilmelidir.
• Tip isimleri, sabitler , enum tipler ve değişkenler farklı isimlendirme
yaklaşımlarıyla isimlendirilmelidirler.
• Eğer değişken isimleri için kısaltmalar kullanıyorsanız, bunların ne
anlama geldiğini bir proje sözlüğü dokumanında tutun. Örneğin
prnVlOrders : printValidOrders gibi
Sayılarla Çalışmak
Sayılar

• Sihirli numaralar kullanmayın Örneğin;


• for(i = 0; i<100; i++)
• 100 sayısının ne ifade ettiği belli değil, bunu engellemek için sabit kullanın
• Örneğin #define LIST_SIZE 100
• Böylece dizi boyutunu değiştirince ilgili her noktada bu sayı değişmiş
olacaktır.
• Bölme işlemleri konusunda dikkatli olun
• Eğer tip çevrimi yapıyorsanız bunları expilicit (açıkça) olarak ifade edin.
• Örneğin y = x + (double)i;
• Farklı tipleri karşılaştırmaktan kaçının Örneğin; Eğer x double ve i
integer is
• if ( x == i) hatalı bir karşılaştırmadır
• Burada tip çevrimi yapacaksanız, muhakka açıkça ifade etmelisiniz (explicit
casting)
• Derleyici hatalarını muhakkak gözden geçirin ve karşılaştırma hatalarını
düzeltin.
Integer
• Integer bulunduğu makineye göre farklı
aralıktaki sayıları ifade eder.
• Integer bölme yaparken dikkatli olun 7/10
=?
• 10*(7/10) =? (10*7)/10
• Taşmalar konusunda dikkatli olun. Bir çok
programlama hatası taşmalardan
kaynaklanır.
• En büyük işaretsiz integer deger (2^32) -
1 dir. Bazen ise (2^16) = 65535
• Örneğin 16 bit bir ortamda aşağıdaki
işaretsiz çarpma işlemini yaparsak
• 300*250 = 75000 bir taşmaya sebep olur.
• Ve sonuç 9464 olarak karşımıza çıkar
• Taşmayı engellemek için beklediğiniz en
büyük sayıyı önceden belirleyin ve gerekli
tedbirleri alarak taşmanın verbileceği
zararı engelleyin.
Kayan Noktalı Sayılar (Floating Points)

• Bu tip sayılarda dikkat etmeniz gereken nokta ise virgülden sonra ne


kadar haneye ihtiyacınız olduğudur. Örneğin 32-Bit bir derleyici 1.0/3
değerini 0.33333330 olarak hesaplayabilir. Bu durumda hesaplama
yaparken bunu dikkate alın.
• Büyük floatin point sayılar üzerinde işlem yaparken dikkatli olun.
Zira sayı büyüdükçe virgülden sonraya kalan kısımdaki bit sayısı
yeterli olmayacaktır. (Örneğin 32-bit bir makine için). Bu durumda
1,000,000.00 + 0.1 işleminin sonucu hala 1,000,000.00 olabilir.
• Benzer şekilde, 5,000,000.02 - 5,000,000.01 işlemi muhtemelen
0.0 sonucunu verecektir.
• Karşılaştırma yaparken dikkatli olun.
• Yuvarlama hatalarına karşı dikkatli olun.
Characters

• Sihirli karakter ifadelerinden uzak durun Örneğin if(input == ‘!’).


• Bir C-Stringi (karakter dizisini) sabit olarak programda kullanmayın,
Örneğin, if (!strcmp(in_str, “PASSWORD”))
• Karakter ve string karşılaştırmalarında dikkatli olun.
• Örneğin
Characters
• Sonlandırılmayan stringlerden uzak durun
• Örnek bir C-String kullanımı.
Boolean
Boolean
Enumerated Tipler
• Mümkün oldukça kullanılmalıdırlar
• İlk değerlere dikkat edilmelidir.
NAMED CONSTANTS

• Bu veriler sabit değerlere isim vermemizi sağlar


• #define MAX_EMPLOYEE 1000
• Bu sayede programınızı parametreleştirmiş olursunuz.
• Eğer bir dizinin boyunu değiştirmek isterseniz.
• int employe_id[MAX_EMPLOYEE];
• Sadece named constant ifadesini değiştirmeniz yeterli olacaktır.
• Bu sayede bir değişiklikle yazılımınızı bir noktadan kontrol edebilirsiniz.
• Bu kodun okunurluğunu ve bakım yapılabilirliğini arttıracaktır.
Arrays (Diziler)
• Diziler en çok kullanılan ve en basit yapısal verilerdir(Structured Data)
• Diziler aynı tipteki verileri tutar ve index yardımıyla bu verilere erişilebilir.
• Dizi indexlerine özen gösterin, indexin dizi boyutunu aşmamasına dikkat
edin.
• Derleme zamanında çoğu zaman dizinin dışında bir indexe ulaşıldığını
kontrol eden mekanizmalar yoktur.
• Koşma anında dizinin dışındaki bir elemana erişmek yaptığınız işleme göre
değişir.
• Eğer okuma işlemiyse genelde bir sorun teşkil etmez.
• Yazma işlemi çoğu zaman ölümcül hatalara yol açar.
• Eğer mümkünse dizilere erişimi sadece ardışıl erişimlerle sınırlayın.
• Ya da her erişimden önce indexin dizinin içerisinde bir oktayı işaret
ettiğinden emin olun.
• Dizilere erişimi container sınıflar üzerinden düzenleyebilirsiniz.
• Eğer çok boyutlu dizi kullanıyorsanız indexlere çok dikkat edin. Satır sütüna
nasıl eriştiğinize özel önem gösterin.
Teşekkürler

You might also like