Programlama'da İşlev (Function) #1

Programlama konusunda başlangıç konularından birisi de işlevler yani fonksiyonlardır. Peki fonksiyon nedir?

Bir ya da daha fazla işlemi yapan en basit kod bloğuna işlev (fonksiyon) denir.

Fonksiyonların en temel kullanım amacı tekrarlanan komutları tek bir yerde tanımlamak ve sonrasında ihtiyaç duyduğunuzda çağırarak kullanmaktır.

Günümüzde aktif olarak kullanılan programlama dillerinin hemen hepsinde desteklenmektedir.

Not: Java gibi sadece nesne yönelimli programlama (OOP) imkanı sunan dillerde yöntemler/metotlar için fonksiyon denildiğini duyabilirsiniz. Temelde benzer şekilde çalışmalarına rağmen bunların farklı kavramlar olduğunu unutmayın.

Bir işlev/fonksiyon tanımlandıktan sonra çağırılmadığı sürece çalışmayacaktır.

Aşağıda PHP, Pyhon, JS ve C++ dillerinde 2 ile 2 toplayıp sonucu ekrana basan örnekleri görebilirsiniz.

PHP:

PHP'de fonksiyonlar "function" sözcüğü ile tanımlanır.

<?php
// Fonksiyonu tanımlayalım
function toplama(){
echo 2 + 2;
}

// Fonksiyonu çağırarak çalışmasını sağlayalım.
toplama();

Python:

Python'da fonksyionlar "def" sözcüğü ile tanımlanır.

# Fonksiyonu tanımlayalım
def toplama():
print(2 + 2)

# Fonksiyonu çağırarak çalışmasını sağlayalım.
toplama()

C++:

C++'da fonksiyonlar veri türlerini ifade eden "int", "float" gibi kelimelerle tanımlanır. Aşağıdaki örnekte kullanılan "void" ifadesi fonksiyonun geriye bir değer döndürmediğini ifade eder.

#include <iostream>

// Fonksiyonu tanımlayalım
void toplama(){
std::cout << 2 + 2 << std::endl;
}

int main(){
// Fonksiyonu çağırarak çalışmasını sağlayalım.
toplama();
}

JS:

Javascript fonksiyon tanımlamak için "function" sözcüğünü kullanır.

// Fonksiyonu tanımlayalım
function toplama(){
console.log(2 + 2);
}

// Fonksiyonu çağırarak çalışmasını sağlayalım.
toplama();

Yukarıdaki örnekler de bir fonksiyonun tanımlanmasını ve çağırılmasını görebilirsiniz. Bu fonksiyonlar kendi içerisinde önceden programcı tarafından tanımlanmış işlemleri yapar ve işlemi bitirir.

Yukarıda gördüğünüz gibi "function", "def" gibi tanımlama ifadelerinden sonra bir boşluk bırakılarak fonksiyonun adı yazılır.

Fonksiyon adınından sonra açılıp kapanan parantezler argüman parantezleridir. Bu örneklerde argümansız fonksiyon örnekleri verilmiştir ancak ileride argümanlı fonksiyonlar hakkında bilgi verilmiştir.

Python dışında diğer programlama dillerinde argüman parantezlerinde sonra süslü parantezlerin açılıp kapandığını görüyorsunuz. Bunlar fonksiyonun kod bloğunun kapsayıcı parantezleridir. Python bunlar yerine fonksiyonun nereden başlayıp nerede bittiğini girintiler ile algılar.

Geriye Döndüren (Returned) Fonksiyonlar

Genellikle fonksiyonların yaptığı işlemlerin sonuçlarını ya da işlem durumunu geriye döndürmesi/bildirmesi söz konusudur.

İşlevin döndürdüğü değer bir değişkene atanarak ya da doğrudan kullanılabilir.

Aşağıdaki örneklerde yine "toplama" işlevi "2 + 2" işlemini yapacak ancak sonucu doğrudan çıktılamak yerine geriye döndürecektir. Sonrasında bu işlemin sonucunu karesi hesaplanarak çıktılanacaktır.

PHP:

<?php

// Fonksiyonu tanımlayalım
function toplama(){
return 2 + 2;
}

// Fonksiyonu çağırarak çalışmasını sağlayalım.
$toplam = toplama();

echo $toplam * $toplam;

Python:

# Fonksiyonu tanımlayalım
def toplama():
toplam = 2 + 2
return toplam

# Fonksiyonu çağırarak çalışmasını sağlayalım.
toplam = toplama()
print(toplam * toplam)

C++:

#include <iostream>

// Fonksiyonu tanımlayalım
int toplama(){
int topla = 2 + 2;
return topla;
}

int main(){
// Fonksiyonu çağırarak çalışmasını sağlayalım.
int toplam = toplama();
std::cout << toplam * toplam << std::endl;
}

JS:

// Fonksiyonu tanımlayalım
function toplama(){
let topla = 2 + 2;
return topla;
}

// Fonksiyonu çağırarak çalışmasını sağlayalım.
let topla = toplama();

console.log(topla * topla);

Görebileceğiniz "return" ifadesi programlama dillerinde genellikle ortaktır. Kendisinden sonra gelen ifadenin değerini geriye döndürmeyi sağlar.

Parametreli/Argumanlı Fonksiyonlar

Fonksiyonlar dışarıdan bir ya da daha fazla değerler alarak, dışarıdan aldığı bu argümanlar ile işlem yapabilir.

Aşağıdaki örnekte kendisine verilen iki tam sayı toplayan ve küpünü hesaplayarak sonucu geriye döndüren fonksiyonun farklı dillerde yazımını görebilirsiniz.

PHP:

<?php

// Fonksiyonu tanımlayalım
function hesapla($x, $y){
$topla = $x + $y;
$kup = $topla ** 3;

return $kup;
}

// Fonksiyonu çağırarak çalışmasını sağlayalım.
$hesapla = hesapla(2, 3);

echo $hesapla;

Python:

# Fonksiyonu tanımlayalım
def hesapla(x, y):
toplam = x + y
kup = toplam ** 3
return kup

# Fonksiyonu çağırarak çalışmasını sağlayalım.
hesap = hesapla(3, 2)
print(hesap)

C++:

#include <iostream>
#include <math.h>

// Fonksiyonu tanımlayalım
int hesaplama(int x, int y){
int topla = x + y;
int kup = pow(topla, 3);
return kup;
}

int main(){
// Fonksiyonu çağırarak çalışmasını sağlayalım.
int sonuc = hesaplama(3, 2);
std::cout << sonuc << std::endl;
}

JS:

// Fonksiyonu tanımlayalım
function hesapla(x, y){
let topla = x + y;
let kup = topla ** 3;

return kup;
}

// Fonksiyonu çağırarak çalışmasını sağlayalım.
let sonuc = hesapla(2, 3);

console.log(sonuc);

Argümanların ya da farklı bir tabirle parametrelerin bir değişken gibi yazıldığını görüyorsunuz. Bunların çalışma şeklide değişkenler ile birebir aynıdır.

Ayrıca her argümanın virgül ile ayrıldığına dikkat edin.

Bir fonksiyon argümansız olabileceği gibi bir ya da daha fazla argüman alabilir. Bu argümanların hepsi ya da bir kısmı opsiyonel/isteğe bağlı olabilir. Bu gibi bir durumda fonksiyon tanımlanırken varsayılan değerler tanımlanır ve belirtilen bu varsayılan değerler kullanılır.

Kendini Çağıran (Recursive) Fonksiyonlar

Çok sık kullanılmasa da bazı durumlarda bir fonksiyon kendi içerisinde kendisini çağırabilir. Bu fonksiyonlara recursive fonksiyonlar deniyor.

Bu fonksiyonlara en güzel örnek matematikteki faktöriyel hesaplaması olabilir. Aşağıdaki örnekte parametre/argüman olarak verilen sayının faktöriyelini hesaplayan fonksiyon örneklerini inceleyebilirsiniz.

PHP:

<?php

// Fonksiyonu tanımlayalım
function faktoriyel($x){
if($x == 1){
return 1;
}
return $x * faktoriyel($x - 1);
}

// Fonksiyonu çağırarak çalışmasını sağlayalım.
$sonuc = faktoriyel(5);
echo $sonuc;

Python:

# Fonksiyonu tanımlayalım
def faktoriyel(x):
if(x == 1):
return 1
return x * faktoriyel(x - 1)

# Fonksiyonu çağırarak çalışmasını sağlayalım.
sonuc = faktoriyel(5)
print(sonuc)

C++:

#include <iostream>

int faktoriyel(int x){
if(x == 1){
return 1;
}
return x * faktoriyel(x - 1);
}

int main(){
// Fonksiyonu çağırarak çalışmasını sağlayalım.
int sonuc = faktoriyel(5);
std::cout << sonuc << std::endl;
}

JS:

// Fonksiyonu tanımlayalım
function faktoriyel(x){
if(x == 1){
return 1;
}
return x * faktoriyel(x - 1);
}

// Fonksiyonu çağırarak çalışmasını sağlayalım.
let sonuc = faktoriyel(5);

console.log(sonuc);

Bunların dışında fonksiyonların farklı türleri de vardır. Geri çağrılabilir fonksiyonlar, isimsiz fonksiyonlar bunlardan bazılarıdır. Bazı fonksiyon türleri programlama diline özgü olabilir ve diğer programlama dillerinde tam olarak karşılığı olmayabilir.

Fonksiyonlar her ne kadar programlamanın temellerinden olduğu için basit bir çalışma prensibine sahip olsa da bir içeriğe sığmayacak kadar geniş bir konudur. Bu yüzden bu içeriğin bir devam içeriğini ileride yazmayı planlıyorum.