Fonksiyonlar (Uygulamalı)

Fonksiyonlar, belli bir işi saklayabileceğiniz yapılardır. Örneğin bir hesap makinesi yapacağınızı düşünelim. Bu durumda her işlem için ayrı bir fonksiyon yazar, gerektiği yerde bu fonksiyonu çağırabilir ve içerisindeki işlemleri gerçekleştirebilirsiniz.

Fonksiyonlar, okunabilir kod (readable code) yazmanızı sağlar. Bu, sizin kodunuzu okumak isteyen başka bir yazılım geliştiricinin kodunuzu daha iyi okuyup anlayabilmesini sağlar. Çünkü fonksiyonlar, bir işi parçalara ayırmamızı sağlar ve bu, kod üzerindeki hakimiyetimizi arttırır. Bununla beraber kodunuzun bakım maliyetini azaltır.

Kodunuz içerisinde Zero Day gibi güvenlik açıkları çıktığı zaman bu açıkları kapatmanız daha kolay olacaktır. Çünkü güvenlik açığı size raporlandığı zaman problemin, kodun hangi kısmından kaynaklandığını daha rahat kavrayabilir ve koda, ona göre müdahale edebilirsiniz.

Fakat fonksiyonların en önemli avantajı, verimlilik sağlamasıdır. Normal değişkenler veya komutlar, sırası geldiğinde çalışırlar yani herhangi bir pasiflik durumu yoktur ve bu durum, kodun verimliliğini düşürür. Fonksiyonlar ise onları tanımladığınızda pasif kod konumuna düşer ve ancak çağırıldıklarında çalışırlar. Bu durum, verimliliği artırır.

İsterseniz önce Bash'te bir fonksiyonun nasıl tanımlandığını görelim ondan sonra daha derine inelim.

Bunun için yukarıda gördüğünüz gibi ilk önce 'function' anahtar kelimesini veriyoruz. Bunun anlamı zaten 'fonksiyon'dur. Bu anahtar kelimeyi verdikten sonra 'funcName' kısmında bu fonksiyonun adını belirliyoruz. Son olarak bir çift normal parantez ve bir çift süslü parantez açıyoruz.

Burada, kodlarımızı oradaki süslü parantezler içerisine yazmamız lazım. Dolayısıyla süslü parantezin içerisine girip iki defa Enter'a bastığınızda onlar ayrılacak ve kod yazmamızı rahatlatacaktır:

Süslü parantezleri yukarıdaki gibi ayırdıktan sonra bir TAB boşluk bırakıp kodlarımızı yazıyoruz. Bu tanımlamayla beraber başka bir çeşit fonksiyon tanımlama işlemi de vardır.

Yukarıda gördüğünüz gibi bu tanımlamayı, 'function' anahtar kelimesi olmadan da yapabiliriz. Ancak ben, fonksiyon kullanırken bu yöntemi tercih etmiyorum; neyin ne olduğu belli olsun, değil mi?

Deminden beri 'çağırmak' diyorum ama ne demek istiyorum? İlk önce bir fonksiyon yazalım ve bu fonksiyonun görevi önce 'Hello' sonra da 'Cyber Worm' yazdırmak olsun.

Gördüğünüz gibi bir fonksiyon tanımladık ve bunun içine iki komut verdik. Yalnız, sol tarafa baktığınızda kodun çalışmadığını gördünüz. Yani ne bir 'Hello' ne de bir 'Cyber Worm' yazısı görebildik. Bunun sebebi, tanımladığımız bu 'selamlama' fonksiyonunu çağırmamamızdır.

Peki, bu çağırma işlemi nasıl yapılıyor?

Bunu, sadece basit bir şekilde fonksiyonun ismini yazarak sağlıyoruz. Kodu çalıştırdığımızda çıktılarımızı aldığımızı görüyorsunuz. İşte, 'pasif kodlar'dan kastım buydu. Çağırılmazlarsa çalışmazlar; karakterli yapılardır.

Blogun başında, hesap makinesi örneğini vermiştim. Basit, dört işlemden oluşan bir şeyler yapmayı deneyelim.

Bunun için ilk önce, kullanıcıdan iki adet sayı girmesini isteyeceğiz. O yüzden bu girdi alma işlemlerini bir fonksiyonda toplasak fena olmaz diye düşünüyorum.

Daha sonra matematiksel işlemlerimizi de gruplandıralım ve her fonksiyon içerisine onlara ait işlemleri koyalım.

Şimdi, bütün bunlar birer fonksiyon olduğuna göre çağırılmadıkları takdirde çalışmayacaklardır; biliyorsunuz. O zaman biz, "seçilen şey eğer toplama ise addition fonksiyonunu çalıştır" şeklinde kodlar yazabiliriz. Bu noktada aklınıza 'select' döngüsü geldiyse tebrik ederim.

select içerisine 4 adet matematiksel işlem ve bir adet çıkış seçeneği ekliyorum. Şimdi, bunları if ile kontrol etmek istemiyorum. Bunun yerine her zaman olduğu gibi case kullanacağım. Toplama işlemi ile başlayalım.

Dikkat edelim; bildiğiniz case yapısı. Ancak burada "Toplama" case'i içerisinde, kullanıcının seçtiği işlemi yazdırıyoruz. Daha sonra 'inputs' fonksiyonumuzu çağırıyoruz; kendisi, kullanıcıdan iki adet sayı girmesini bekleyen bir fonksiyondu. Son olarak işlem, toplama işlemi olduğu için toplama işlemini yapan fonksiyonu yani 'addition' fonksiyonunu çağırıyoruz ve iki adet noktalı virgülümüzü ekleyerek case'i kapatıyoruz.

Daha sonra "Çıkış" işlemi haricindeki işlemler aynı mantıkta ilerleyecektir:

Çıkış işlemi için Kali'yi Tanıyalım isimli blogumuzda da sözüne ettiğimiz 'exit' komutunu kullanacağız. Hatırlayın; terminalde yazabildiğimiz komutları burada kod olarak yazabiliyoruz çünkü Bash, bir Shell Script idi.

Burada dikkatinizi 'sleep' komutu çekebilir. Bu komut, 'time' isimli bir kütüphanenin bir modülüdür. Bunu, başka programlama dillerinde 'time.sleep()' şeklinde veya benzer şekillerde de görebilirsiniz. Kendisi, yapılan işlemi yavaşlatma görevini üstlenir. Zaten anlamı da 'uyumak' şeklindedir. Dolayısıyla biz, 'sleep 3' dediğimiz zaman Bash, 3 saniye durduktan sonra diğer komut olan 'exit' komutuna geçecektir.

Son olarak burada, case'in son aşaması olan 'kalan ihtimaller ( * ) )' kısmını da halledip kullanıcının, listedeki seçenekler dışında bir şey girmesi durumunda onu uyarmamız yeterli olacaktır. Unutmadan; case'i ve select'i de kapatalım:

Evet, uygulamamız da bu kadardı. Bu uygulamayı lütfen siz de yapın ve isterseniz yeni matematiksel işlemler ve yeni fonksiyonlar yaratarak kodu geliştirebilirsiniz.


Yayınlanma Tarihi: 2022-09-19 15:09:44

Son Düzenleme Tarihi: 2022-09-23 14:25:48