Kodlama yani kod, bir bilgisayarın ihtiyacımız olanı yapmasını sağlamak içindir. Kod yığını bir tasarlanarak yazılmadığı zaman bir müddet sonra ipin ucunu kaçırdığımız da bir gerçektir. Bu sorunu aşmak adına her ne kadar framework'ler yardımımıza yetişse de yinede custom kodlamalar kaçınızmazdır. 

Kodlarımızı yazarken sadece derleyici odaklı planlama yaparsak işte bu noktada yanılmaya başlarız. Kodlarımızı sadece derleyiciler değil insnalarında okuyabileceğiniz varsayarak yazarsak işte tasarlayarak kodlamanın başlangıcını yapmış oluyoruz.

Kodu okunabilir hale getirmek aslında bir sanattır ve her sanatta olduğu gibi bir tasarlama süreci vardır. 

Tasarlayarak kodlama ile ilgili en ciddi sorun yapmanını zor olmasıdır. Düşünsenize bir yandan hiçbir şeye dikkat etmeden sadece yazım kurallarına uyup kodlama yapacaksınız diğer yandan her satırı her paragrafı satır araları açıklamaları boşlukları dahi bir tasarım algoritması içerisinde yapacaksınız. Tabiki ilk başlarda bu ciddi bir sorun veya iş yükü gibi görünebilir ancak bu yönde alışkanlığımızı yönlendirdiğimizde bir müddet sonra artık sizin vazgeçilmeniz olacağından şüphem yoktur. 

Hala güzel kod yazmanını yollarını araştıran birisi olarak sizlere şimdiye kadar edindiğim bazı tecrübeler ile tasarlayarak sanatsal kod yazmak için takip edilmesi gereken unsurlardan bahsetmek istiyorum. 

Birim Testi ile başlayın

Test Odaklı Geliştirme evrensel olarak sevilmiyor, ancak bunun çok iyi bir uygulama olduğunu düşünüyorum. Tüm kodunuzun test edilmesini sağlamakla kalmaz, aynı zamanda kodunuzu yazmadan önce nasıl kullanılacağını da düşünmeye zorlar. Bu örneklerde, PHP'de bir e-posta istemcisi yazdığımızı ve müşterinin tasarımında yaratıcı olmak istediğimizi düşünelim. E-posta göndermek için bir birim testi ile başlayalım;

<?php

class EmailClientTest extends PHPUnitFrameworkTestCase
{
    public function test_sending_an_email()
    {
        $client = new EmailClient();
        $emailMessage = new EmailMessage('Hello world!');

        $result = $client->send('[email protected]', $emailMessage);

        $this->assertTrue($result);
    }
}

Burada önce birim testini yazdığımızdan, kodun nasıl biçimlendirilmesini istediğimizi zaten biliyoruz. Biz bir olacak biliyorum Emailtemsilen iki sınıflarıyla ad Clientve Message. Ayrıca send, e-posta iletisini müşteriye gönderme işlemi için bir yöntemimiz olacağını da biliyoruz . Birim testinde, kodumuzun parçalarının nasıl adlandırılacağına da karar verdik, bu da bizi bir sonraki noktaya getiriyor.

Değişkenleri ve Yöntemleri Adlandırırken Gramer Kullanın

Programcılar çoğu zaman şeyleri adlandırmanın zor olduğunu ve gerçek olduğunu şaka yapıyorlar! Bununla birlikte, bir kod parçasını adlandırmak sadece zor değil, aynı zamanda çok önemlidir. Kodun nasıl adlandırıldığı, bir geliştiricinin onu ne kadar çabuk anlayabileceğini belirler, hataları ve geliştirme süresini azaltır. Yukarıdaki örnekte, tüm kodumuzu içerdiği içerikle ilgili çok açık olan E-posta ad alanına koymaya karar verdik. 

Daha sonra, Clientmesaj gönderen nesneyi ve Messageher iki açıklayıcı ad olan e-postanın kendisini temsil etmeyi seçtik . Son olarak, sende-posta ile yaygın olarak ilişkilendirilmiş bir fiil olan bir yöntem diyoruz . Şimdi, iyi bir örüntü görüyoruz: sınıf adları için isimler ve yöntemler için fiiller kullanın.

İşlevlerinizi Küçük Tutun

Bir işlem için tüm kodu tek bir fonksiyona koymak cazip gelebilir. Ancak, okunabilirlik ve test edilebilirlik için küçük parçalara ayırmak gerçekten önemlidir. sendYöntemi örnek olarak kullanalım .

<?php

namespace Email;

class Client
{
    public function send(string $emailAddress, Message $message): bool
    {
        // Validate parameters
        $validateEmail = filter_var($emailAddress, FILTER_VALIDATE_EMAIL);
        $validateMessage = strlen($message->text()) < 1000;
        if (!$validateEmail || !$validateMessage) {
            return false;
        }

        // Communicate with email server
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, 'https://mail.example.com');
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, [
            'to' => $emailAddress,
            'text' => $message->text(),
        ]);

        $result = curl_exec($curl);
        curl_close($curl);

        return $result;
    }
}

Bu yöntem basittir, ancak karmaşıktır. Anlamak biraz zor, bu yüzden okuyucuya ne olduğunu bilmek için bazı yorumlar ekledik. Ancak, yorum yerine yeni bir yöntem oluşturursak ne olur?

<?php

namespace Email;

class Client
{
    public function send(string $emailAddress, Message $message): bool
    {
        if (!$this->validateParameters($emailAddress, $message)) {
            return false;
        }

        return $this->sendToMailServer([
            'to' => $emailAddress,
            'text' => $message->text(),
        ]);
    }

    private function validateParameters(string $emailAddress, Message $message): bool
    {
        $validateEmail = filter_var($emailAddress, FILTER_VALIDATE_EMAIL);
        $validateMessage = strlen($message->text()) < 1000;
        if (!$validateEmail || !$validateMessage) {
            return false;
        }

        return true;
    }

    private function sendToMailServer(array $params): bool
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, 'https://mail.example.com');
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $params);

        $result = curl_exec($curl);
        curl_close($curl);

        return $result;
    }
}

Bizim sendyöntemimiz artık çok daha temiz. Diğer işlevler, her biri 10 satırdan daha az kod içeren tek bir görevi gerçekleştirerek okunmasını kolaylaştırır.

Stil Kılavuzu Kullanma

Son olarak, seçtiğiniz programlama dili için bir stil kılavuzu kullanmanızı öneririm. PHP için, kodum için PSR-2 FIG standardını kullanmayı seviyorum. FIG standardı Laravel ve Symfony gibi popüler PHP çerçeveleri tarafından yaygın olarak tanınmakta ve kullanılmaktadır. Ayrıca, Symfony ekibi, PSR-2: PHP Kodlama Standartları Fixer'ı takip etmek için kodunuzu otomatik olarak yeniden biçimlendiren bir CLI yardımcı programı yayımladı .

Sonuç

Kod tasarlamak çaba ve pratik gerektirir, ancak birçok ödül alır. Kodunuzun daha küçük, daha okunabilir parçalar halinde olmasına neden olur ve netlik ve odak getirerek hataları azaltır. Daha fazla öğrenmeye devam etmek için iyi tasarlanmış örnek kodları bol bol okumanızı tavsiye ederim. Mesela  Laravel veya Ruby on Rails temiz ve sanatsal kodlama örnekleri ile doludur. 

İyi kod yazmalar, esenle kalın.