Temiz Kod Yazmak

Raphers

Adanmış Üye
31 Ağu 2014
7,286
5
System.Net
Mimar Aslan’ın düzenlediği Bilişim Sohbetleri’ni bilenleriniz vardır.
Bilişim alnında uzman kişilerle her hafta sohbet yapılır, farklı konular ele alınır, bizlerde bilgileniriz.

Akın Kaldıroğlu ile yapılan Clean Code (Temiz Kod) sohbetini dinledim.
Sohbette Mimar Aslanın şu sözü dikkatimi çekti : "Hayatımda sadace bir kez en baştan kod yazdım."

Bu ne demek oluyor?
Bizler yarın öbürgün iş hayatına girdiğimizde bize sıfırdan al şu programı yaz demeyecekler.
Yazılmış bir kodu düzenlicez, geliştircez vs.

Peki burda karşımıza çıkacak en büyük sorun nedir? Kodu anlamakta zorlanmak.
Bende çok kez bu duruma düştüm, kodu düzenlemek için aldığımda en baştan incelemek zorunda kalıyorum, burda ne yapmış, bu ne demek vs. kodu düzenlemeyi bırak, konu anlamak uzun bir zaman alıyor.

Durum aynen bu..
4gVpjG.png


Peki bunun sebebi nedir? Temiz kod yazamamak.
Evet istenilen kodu bir şekilde yazabiliriz, öyle böyle o kod çalışır ama yazdığımız kodu başkası okuduğunda "bu ne la?" diyorsa o kod temiz yazılmış, açıklayıcı bir kod değildir. İş hayatında bize bir kod verildiğinde o kodu yazan kişinin adını anmıyorsak o kod güzel yazılmıştır.


Anlaşılır, temiz kodu nasıl yazarız?

Klasör yapısı

Misal web programlama yapıyorsak öncelikle klasör yapılarını planlamak gerekir. Hem html sayfamız, hem css/js dosyalarımız, hemde resimler vb aynı klasör içindeyse bırakın kodu, klasörde bile bir şey arayıp bulmak çok zor olacaktır.

Bunun için öncelikle klasör yapımızı oluşturmamız gerekir. Misal..

7k1BZL.png


Yorum satırları

Yorum satırları sanırım kod yazarken en iyi dostumuz, kod okurkende en iyi yardımızdır.
Bir fonksiyon tanımladık kodları yazdık program çalıştı. Peki 2 ay sonra o kodu okuduğumuzda veya başkası incelediğinde "bu fonksiyon ne yapıyor ya?" dememek için yorum satırlarını sürekli olarak kullanmalıyız. Fonksiyonun başına //bu fonksiyonun görevi şudur, geriye bunu döndürür vs yorumlar bırakmamız gerekir.

Değişken isimlendirmeleri

Kod yazarken sürekli değişkenler kullanıyoruz. İlk başladığım zamanlarda zaman kaybetmemek için int a,b,c,i,j; diye tanımlardım. Kod çalışsın, işimi görsünde yeter gibisinden. Fakat aradan 1 hafa geçse ve kodu açsam a diye tanımladığım değişkenin işi ne, ne yapıyor, ne bu gibi sorularla bug’da kalmamak için değişkenleri hangi amaç için oluşturduğumuzu anlaşır biçimde tanımlamak gerekiyor.

int a,b,c;
int sayi1, sayi2, toplam;


gibi..

Yazım standartları

Herkesin belli başkı yazım standartları vardır, bunlar kod yazdıkça kendiliğinden oluşur ve bu şekilde yazmaya devam ederiz.
Mesela ben C#’ta form application çalışırken araçlarıma textBoxAd, txtBoxYas, comboboxOkul gibi isimler veririm. Form’larıma frmAnaForm, frmAdminPaneli, frmSqlInjection gibi isimler veririm, ki ne oldukları belli olsun, kod yazarken bana zaman kazandırsın diye.

textbox yazdığım gibi karşıma textboxad, textboxyas vb tüm textbox’lar sıralanacak. Ve kodu okuyan kişi textbox1.text’i gördüğünde bu hangi textbox acaba diye dönüp form’a bakmamasını sağlayacak.

Ve okunabilirlik açısından mesela toplama işlemi yapan bir fonksiyonun adını yazarken ilk harf küçük ardından gelecek olan kelimelerin baş harflerini büyük yazmakta fayda var. Hatta fonksiyonların başına _ koymakta o fonksiyonları çağırırken adı neydi ya demekten bizi kurtarır.
_ yazdığımız gibi önümüze projede ki tüm fonksiyonlar sıralanacaktır.

Örnek bir fonksiyon tanımlaması
_ToplamaIslemi(int sayi1,sayi2){
toplam = sayi1 + sayi2;
return toplam;
}


Her fonksiyonun bir amacı olmalıdır. Bir fonksiyonla ben her işimi halledebilirim mantığı yanlıştır. Halledemez misin? Zorlarsan hallolur, ama bir hata çıktığında acaba nerde diye aramak zorunda kalırsın. Kodu okuyan kişi ne yapmış la bu diye anlamak zorunda kalır.



Kod içerisinde bazı şeyleri sürekli tekrarlıyorsak bunları bir fonksiyon ile halletmeye çalışmalıyız. Hem satır tasarrufu yapmış oluruz, hemde zaman kazanırız.

Kodu yazan her yazılımcı, aslında bir başka programcının yazdığı kodun okuyucusudur. Bir gün yazdığınız kod mutlaka başkalarının eline ulaşacak ve o kodlar okunacak, anlaşılmaya çalışılacak.

Sıkça görmüşsünüzdür Nasıl Bulmak İstiyorsanız Öyle Bırakın diye, tıpkı o misal..
 

Wep

Kıdemli Üye
28 Ocak 2015
4,412
8
İstanbul
İyi bir makale ancak (vb.net için konuşuyorum) programlamaya ilk başladığım zaman benim için karmaşık olan kodu bile biraz İngilizce ve mantık ile basit bir şekilde düzenledim. İngilizce çok önemli :)
 

Raphers

Adanmış Üye
31 Ağu 2014
7,286
5
System.Net
İyi bir makale ancak (vb.net için konuşuyorum) programlamaya ilk başladığım zaman benim için karmaşık olan kodu bile biraz İngilizce ve mantık ile basit bir şekilde düzenledim. İngilizce çok önemli :)
Aynen öyle, zaten yabancı sektörlerin iyi işler başarmalarından birisi de bu. Kodlar zaten ingilizce, e biraz da mantık :)
 

ihan3t

Kadim Üye
7 Şub 2012
5,018
22
Ve okunabilirlik açısından mesela toplama işlemi yapan bir fonksiyonun adını yazarken ilk harf küçük ardından gelecek olan kelimelerin baş harflerini büyük yazmakta fayda var. Hatta fonksiyonların başına _ koymakta o fonksiyonları çağırırken adı neydi ya demekten bizi kurtarır.
_ yazdığımız gibi önümüze projede ki tüm fonksiyonlar sıralanacaktır.

Örnek bir fonksiyon tanımlaması
_ToplamaIslemi(int sayi1,sayi2){
toplam = sayi1 + sayi2;
return toplam;
}

Burda bir yanlışlık var. C# kodlayan birisi fonksiyon isimlerini küçük harfle başlayamaz veya _ ile başlayamaz. C# ın kendi standartları vardır, c# class ve fonksiyon yapılarına bakılırsa, fonksiyon isimlerinin ilk harfi daima büyük başlar ve _ şeklinde ön ek getirilmez. Javada durum farklıdır, küçük harfle başlanabilir.

C# kodlanıyorsa ilerde başkasının eline geçen kod anlaşılması açısından , c# ın kendi kodlama standartlarına uyulmalıdır.

Bahsedilen ön ek interface yapılarında getirilir, o da gene _ şeklinde değil büyük ı "I" harfi ile...

Yeni başlayacak ve kendini geliştiren arkadaşlara küçük bir ek not olsun buda..
 

ihan3t

Kadim Üye
7 Şub 2012
5,018
22
Ayrıca yazılım notasyonlarına merakı olan arkadaşlar için şunları araştırmaların tavsiye ederim : hungarian notation, camel notation, java code notation.
 

ihan3t

Kadim Üye
7 Şub 2012
5,018
22
Abi konu zaten Raphers abimize ait değil, Hayallerini Kodla: Temiz Kod Nasıl Yazılır? Bu siteden almis :D

"Alıntı" yazmadığı için özgün konu zannetmiştim. Demek ki değilmiş.

Her neyse hiç değilse benim yazdıklarım doğrultusunda doğru bilgileri arkadaşlar edinmiş olur.

Konu sahibi konusunu düzenleyip yazdıklarımı alıntılayabilir konusuna, böylelikle konuyu okuyan yeni arkadaşlar yanlış bilgiler edinmezler.
 

erdmarsln

Katılımcı Üye
30 Haz 2015
308
0
Ankara
Burda bir yanlışlık var. C# kodlayan birisi fonksiyon isimlerini küçük harfle başlayamaz veya _ ile başlayamaz. C# ın kendi standartları vardır, c# class ve fonksiyon yapılarına bakılırsa, fonksiyon isimlerinin ilk harfi daima büyük başlar ve _ şeklinde ön ek getirilmez. Javada durum farklıdır, küçük harfle başlanabilir.

C# kodlanıyorsa ilerde başkasının eline geçen kod anlaşılması açısından , c# ın kendi kodlama standartlarına uyulmalıdır.

Bahsedilen ön ek interface yapılarında getirilir, o da gene _ şeklinde değil büyük ı "I" harfi ile...

Yeni başlayacak ve kendini geliştiren arkadaşlara küçük bir ek not olsun buda..

yanlışın var dostum gerek fonksiyon isimleri gerek class isimleri _ ilede başlar küçük harflede başlar

dwsz10.png
 
Son düzenleme:

ihan3t

Kadim Üye
7 Şub 2012
5,018
22
yanlışın var dostum gerek fonksiyon isimleri gerek class isimleri _ ilede başlar küçük harflede başlar

dwsz10.png

Anlamadınız sanırım, diyorum ki c# .net in kendi standartları var. Örneğin herhangi bir class için f12 ye basıp içine baktığınızda, hiçbir fonksiyon veya class _ ve küçük harfle başlamaz.

Sen kendin yazarsın o ayrı , fakat çoklu geliştirmelerde genel standarta uyulur.
 

zztri

Yaşayan Forum Efsanesi
9 Tem 2015
10,053
388
Ankara
Burda bir yanlışlık var. C# kodlayan birisi fonksiyon isimlerini küçük harfle başlayamaz veya _ ile başlayamaz. C# ın kendi standartları vardır, c# class ve fonksiyon yapılarına bakılırsa, fonksiyon isimlerinin ilk harfi daima büyük başlar ve _ şeklinde ön ek getirilmez. Javada durum farklıdır, küçük harfle başlanabilir.

C# kodlanıyorsa ilerde başkasının eline geçen kod anlaşılması açısından , c# ın kendi kodlama standartlarına uyulmalıdır.

Bahsedilen ön ek interface yapılarında getirilir, o da gene _ şeklinde değil büyük ı "I" harfi ile...

Yeni başlayacak ve kendini geliştiren arkadaşlara küçük bir ek not olsun buda..

Kesinlikle.. .NET'te yazıyorsan, standarda "big cameltoe" diyorlar, her kelimenin ilk harfi büyük. Java'da da small cameltoe kullanılır, yani ilk harfi küçük yazar, her kelimeyi ayırmak için ilk harfini büyük yazarsın.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.