Basit kod yazmak için basit kurallar rehberi

Hayreddin Tüzel
Sep 2, 2018 · 3 min read

Merhaba arkadaşlar,

Yazımız adından da anlaşılacağı üzere basit kod yazmak üzerine. Elbette basitten kastettiğimiz anlam sade, açık, kolay okunabilir ve değiştirilebilir bir kod. Uğraştığınız projeler büyüdükçe ve profesyonelleşme ihtiyacı duydukça bir kodun çalışır olmasının sizin için yeterli olmadığını farkedeceksiniz. Çünkü belirli bir standartta yazılmamış kod parçacıkları gelecekte sizi “Acaba şu programı baştan yazsam mı” diye düşündürmeye başlayacak. Bu rehberde Fazla laga luga yapmayacağım ve doğrudan konuya gireceğim. Sizin için olabildiğince basit ve uygulanabilir taktikler vermeye çalışacağım.


Kısaltmalara yer yok..

Yazacağımız kod parçacığında olabildiğince kısaltmalardan uzak durmamız gerekiyor. Değişken, fonksiyon ve sınıf isimlerimizi olabildiğince açık yazarsak bu bize okunabilirliği yüksek bir kod parçacığı yaratma fırsatı verecektir. Ayrıca inanın kısaltmalardan kazanacağınız zaman ileride harcayacağınız zamanın yanında hiç kalacaktır.

Şimdi bunu bir örnekle açıklayacak olursak;

Aşağıdaki kod parçacığı yerine

$cntr = 3; 

bunu kullanın:

$counter = 3;

Oldukça basit değil mi? ama inanın çok etkili.

Başka bir örneğe göz atalım;

foreach ( $x in persons) 
{
//code...
}

yerine

foreach ($person in $persons)
{
//code..
}

kullanın.

Ancak kısaltma kullanmayın demek 100 karakter uzunluğunda değişkenler kullanmak anlamına gelmemelidir. Yine bir örnekle açıklayacak olursak;

class User {    public function getUsersNameByTheirIdentificarion () {
//code..
}
}

gibi bir fonksiyon adı yerine

class User {public function getNameById () {
//code..
}
}

çok daha kullanışlı ve mantıklı bir seçim olacaktır.

Else’lere veda..

Evet yanlış okumadınız. Else’lere veda ediyoruz. Else blogları kodumuzun okunabilirliğini ciddi anlamda düşürebilir. Bunun yanında bize fazladan kod yazmaya zorlar. Hemen örnek üzerinden inceleyelim.

Örneğimizi önce else kullanarak yazalım.

public function makeReservation($isAvailable, $time)
{
if(!$isAvailable)
{
return "You are not available for this time";
} else
{
if(!$time->isValid())
{
return "You reserved successfully";
} else
{
return "Time is not valid!";
}
}
}

Kodumuzu else’lerden kurtaralım:

public function makeReservation($isAvailable, $time)
{
if(!$isAvailable)
{
return "You are not available for this time";
}
if(!$time->isValid())
{
return "You reserved successfully";
}

return "Time is not valid!";
}

Adeta sihirli bir değnek dokundu değil mi?

Başka bir örneği inceleyelim..

function RenewSubscription ($userType)
{
if($userType == 'silver')
{
$this->createSilverSubscription();
} elseif ($userType == "gold")
{
$this->createGoldSubscription();
}
}

Şimdi kodumuzdan else’leri atıp, bir tutam interface katalım..

function RenewSubscription (UserType $userType)  //Evet bu interface
{
$userType->create();
}
function getUserType($type)
{
if($type == 'silver')
{
return new SilverUser;
}
return new GoldUser;
}
$userType = getUserType($user->type);RenewSubscription($userType);

Umarım orada herşey yolundadır. Değilse İnterfaces dökümantasyonuna bakmanız faydalı olabilir.

Daha az sekme..

Bahsedeceğim konunun kolay olmadığını ve emek istediğini biliyorum. Ancak inanın harcadığınız çaba yanınıza kar kalacak. Evet tablar’a olabildiğince az basmaya çalışıyoruz. Kod parçacığımız içerisinde 3–4 derinlikte kodlar bulundurmayı sonlandırıyoruz. Hemen bir örnekle açıklamaya çaışalım.

class User {

protected $accounts;
function __construct($accounts)
{
$this->accounts = $accounts
}
public function makeReservation($user, $isAvaiable, $time)
{
if($isAvailable)
{
if($time->isValid())
{
$user->makeReservation();
}
}
}
}

yerine

class User {

protected $accounts;
function __construct($accounts)
{
$this->accounts = $accounts
}
public function makeReservation($user, $isAvaiable, $time)
{
if($isAvailable && $time->isValid()) //Validation Rules
{
$user->makeReservation();
}
}
}

kullanmak gibi. Hatta bu örnek için validation kurallarını bile makeReservation içine taşımak tartışılabilir. Elbette bahsettiğim şey her zaman bu kadar basit olmayabiliyor. Lütfen daha fazlasını düşünmeye çalışın..

Basitleştirmek için Zoraştırın..

Bazen primitive’leri bir sınıf haline getirmenin şaşırtıcı faydaları olabilir. Çünkü kod parçacıklları büyüdükçe ve proje karmaşıklığı arttıkça basit olarak gördüğümüz değişkenler basit olmaktan çıkabilir. Ve böyle zamanlarda keşke bunu nesne olarak tanımlasaydım diyebiliriz. İyi bir planlamanın önemide burada ortaya çıkar. Başta basit düşünmek yerine karmaşık düşünmek ilerisi için karışık işleri basitleştirebilir. Karışık oldu değil mi:)

Hemen teorik bir örnekle inceleyelim. Bir email değişkenimiz olsun. Kulanıcın e-posta adresini tutsun. Ancak ilerde eposta adresinin validation ihtiyacı ortaya çıkarsa. Evet sıkıntı yok bir fonksiyona bunu validate edebiliriz. Ya ilerde kulanıcın e-posta adresinin hashlenmesi ihtiyacı cıkarsa. Bunuda bir fonksiyonla halettik. Ya ilerde… evet işler karmaşıklaşıyor değil mi? Keşke bir Email sınıfımız olsaydı :)

Sıkmamak adına ve işeri olabildiğince basit tutmak adına kısa kesiyorum. Eklenebilecek çok şey olduğunun farkındayım. Lütfen tavsiyede bulunmaktan çekinmeyin. Teşekkürler..

hayreddintuzel.com

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade