Javascript fonkisyonlarda parametre ve return'ün kullanımı

Zembla

Hectopat
Katılım
25 Temmuz 2020
Mesajlar
620
Çözümler
13
Arkadaşlar, takip ettiğim kaynaklarda anlatılıyor ve kendimde biraz Google'da vs. bakınmama rağmen fakat tam oturtamadım kafada şu fonkisiyonlarda parametre ve return'nü? Neden gereklidir? Dilediğiniz kadar detay verebilirisiniz.
 
Cunku yaptigin isleri mantiksal olarak ayirmak ve tekrar kullanilabilir fonksiyonlar seklinde olusturmak zaman kazandirir, okumayi kolaylastirir.
Kullanicidan 1 ile 100 arasinda sayi girmesini istedin diyelim.
Kullanici sayi girmemis olabilir. ( 'abc' yazar )
Ya da girdigi sayi 1 - 100 arasi olmayabilir.
Bunlari tek satirda dogrulayabilirsin ve ( Number(input) < 100 gibi ) programina devam edebilirsin.
Ya da fonksiyonel programlama yapar:
function isNumeric(input)
function isBetween(number, min, max)
diye iki fonksyon yazarsin.

2. si biraz kodu uzatir ama her projede kullanirsin cunku anonim haldeler.
Bu sekilde kodunu lego gibi kucuk yapboz fonksyonlara bolersen test etmen, okuman ve bir sonraki projende kullanman kolaylasir.

Functional programming i okuyabilirsin.
Mobildeyim diye cok detayli yaz(a)madim.
 
İlk olarak üniversite 2'ye geçtim bu sene. İlk sınıfta Java dersleri aldık. Sen yazınca fark ettim hemen unutmuşum. Yanlışım olursa düzeltin lütfen.
Return ile başlayacak olursam return şu nedenle gerekli bana göre. Fonksiyonu oluşturup main ile fonksiyonu çağırdık diyelim. Fonksiyon çalıştığında elde edilen değeri return ile Main'e yollarız. Bu sayede main işlemi yapar. Bir de return kullanımı fonksiyona göre değişir. Mesela bir fonksiyonda değerler sağlanırsa 1 sağlanmazsa 0 yollarsınız buna göre main işlem yapar. Başka bir fonksiyonda ise elde edilen değeri yollarsınız main fonksiyonu ona göre sonuç verir. Bu recursive fonksiyonları kullanabilmemiz için de önemli bir faktör. Ayrıca fonksiyonu birden fazla çağırabildiğimiz ve her çağırışta verilen değere göre fonksiyon return yapacağı için gereksiz uzunlukta kodlardan kurtulmuş oluyoruz. Parametre konusunda biraz çalışmam gerekiyor çünkü unutmuşum. Hocamın notlarını bulursam buraya ekleyeceğim. Yanlışım olduysa affola.
 
Cunku yaptigin isleri mantiksal olarak ayirmak ve tekrar kullanilabilir fonksiyonlar seklinde olusturmak zaman kazandirir, okumayi kolaylastirir.
Kullanicidan 1 ile 100 arasinda sayi girmesini istedin diyelim.
Kullanici sayi girmemis olabilir. ( 'abc' yazar )
Ya da girdigi sayi 1 - 100 arasi olmayabilir.
Bunlari tek satirda dogrulayabilirsin ve ( Number(input) < 100 gibi ) programina devam edebilirsin.
Ya da fonksiyonel programlama yapar:
function isNumeric(input)
function isBetween(number, min, max)
diye iki fonksyon yazarsin.

2. si biraz kodu uzatir ama her projede kullanirsin cunku anonim haldeler.
Bu sekilde kodunu lego gibi kucuk yapboz fonksyonlara bolersen test etmen, okuman ve bir sonraki projende kullanman kolaylasir.

Functional programming i okuyabilirsin.
Mobildeyim diye cok detayli yaz(a)madim.
Öncekli cevabın içim teşekkürler.Dediğin gibi biraz daha detay gerekiyor galiba 👍
İlk olarak üniversite 2'ye geçtim bu sene. İlk sınıfta Java dersleri aldık. Sen yazınca fark ettim hemen unutmuşum. Yanlışım olursa düzeltin lütfen.
Return ile başlayacak olursam return şu nedenle gerekli bana göre. Fonksiyonu oluşturup main ile fonksiyonu çağırdık diyelim. Fonksiyon çalıştığında elde edilen değeri return ile Main'e yollarız. Bu sayede main işlemi yapar. Bir de return kullanımı fonksiyona göre değişir. Mesela bir fonksiyonda değerler sağlanırsa 1 sağlanmazsa 0 yollarsınız buna göre main işlem yapar. Başka bir fonksiyonda ise elde edilen değeri yollarsınız main fonksiyonu ona göre sonuç verir. Bu recursive fonksiyonları kullanabilmemiz için de önemli bir faktör. Ayrıca fonksiyonu birden fazla çağırabildiğimiz ve her çağırışta verilen değere göre fonksiyon return yapacağı için gereksiz uzunlukta kodlardan kurtulmuş oluyoruz. Parametre konusunda biraz çalışmam gerekiyor çünkü unutmuşum. Hocamın notlarını bulursam buraya ekleyeceğim. Yanlışım olduysa affola.
Şöyle söyliyim değerlerin sağlanıp sağlanmama durumunu ölçme gibi bir durum varsa bunu neden koşullar ile yapmıyoruzda(koşul ifadeleri true/false mantığı oldugu için böyle düşündüm) return ile kontrol ediyoruz.Benim return'den ilk anladığım teorikte işlemi hafızada tutturup işlem göre görev belirtmek gibi bir şey anladım.Mesela örnek vericemde tam kavrayamadıgım için doğru örneğide bulamıyorum.Şunu sorsam o zaman return'ün başlıca görevleri nedir veya nelerdir. Atıyorum değişkenin veri tutmak deriz görevi açıklamak gerekirse.Cevap için tşk bu arada.
 
Son düzenleme:
return değer tutmaz aksine bir fonksiyon içinden neleri geri döndürmek istediğinizi belirler. Örnek olarak herhangi bir hesaplama işlemi yapacaksınız ve koşullara göre dönecek olan sonuç farklı olabilir.
Örnekte return kullanım şekillerinden birini gösteriyorum.

JavaScript:
function buyukSayi(a, b) {
    if(a > b) {
        return a;
    }
    else if(b > a) {
        return b;
    }
    else {
        return "Alakasız bir cevap";
    }
}

const sayim = buyukSayi(3,8) // cevap 8;
const sayim2 = buyukSayi(4,2) // cevap 4;
const sayim3 = buyukSayi(4,4) // cevap "Alakasız bir cevap";

Başka önemli noktası ise return çalıştıktan sonra altındaki yazılanlar işleme alınmaz

JavaScript:
function deneme(a,b) {
    console.log('İLK DENEME');
    if(a > b) {
    return a
    }
    console.log('İKİNCİ DENEME'); // A değeri B değerinden büyük olduğunda bu console.log hiç çalışmayacaktır.
}

Bunun dışında aklıma gelen bir özelliği yok.
Yazılım dünyasında şöyle bir kavram vardır DRY (Don't Repeat Yourself) yane kendi kendini tekrarlama. Eğer bir kodu birden çok defa yazmak zorunda kalıyorsan bunu bir fonksiyon veya döngülerle halletmeye çalışmak her zaman kodunuzun okunaklığını artırır ve bir değişiklik olduğunda tek bir hareket ile her yerde o değişikliği yapmanızı sağlar. Fonksiyonların genel avantajı bunlarla bitmiyor: Fonksiyonlar parametre aldığı için fonksiyonunuza ilettiğiniz parametrelere göre farklı sonu alabilir veya farklı bir işlem gerçekleştirebilirsiniz. Fonksiyonlar bir nevi macro gibi düşünebilirsiniz ama bazı yerlerde fonksiyonlar olmadan mantığını oluşturmak nerdeyse imkansızdır. Örneğin callback dediğimiz bazı fonksiyon tipleri vardır ve eventListenerde bile onları kullanıyorsunuz.

Bu arada her yerde fonksiyon yazmanıza tabiki gerek yok örneğin a mı büyük b mi gibi basit işlemler için direk script içinde kontrol edebilirsiniz ama bazen durum çok daha karmaşık oluyor veya bu a-b kıyaslama olayını birden çok yerde yapmanız gerekiyor ozaman fonksiyon can kurtarıyor.
 
return değer tutmaz aksine bir fonksiyon içinden neleri geri döndürmek istediğinizi belirler. Örnek olarak herhangi bir hesaplama işlemi yapacaksınız ve koşullara göre dönecek olan sonuç farklı olabilir.
Örnekte return kullanım şekillerinden birini gösteriyorum.

JavaScript:
function buyukSayi(a, b) {
    if(a > b) {
        return a;
    }
    else if(b > a) {
        return b;
    }
    else {
        return "Alakasız bir cevap";
    }
}

const sayim = buyukSayi(3,8) // cevap 8;
const sayim2 = buyukSayi(4,2) // cevap 4;
const sayim3 = buyukSayi(4,4) // cevap "Alakasız bir cevap";

Başka önemli noktası ise return çalıştıktan sonra altındaki yazılanlar işleme alınmaz

JavaScript:
function deneme(a,b) {
    console.log('İLK DENEME');
    if(a > b) {
    return a
    }
    console.log('İKİNCİ DENEME'); // A değeri B değerinden büyük olduğunda bu console.log hiç çalışmayacaktır.
}

Bunun dışında aklıma gelen bir özelliği yok.
Yazılım dünyasında şöyle bir kavram vardır DRY (Don't Repeat Yourself) yane kendi kendini tekrarlama. Eğer bir kodu birden çok defa yazmak zorunda kalıyorsan bunu bir fonksiyon veya döngülerle halletmeye çalışmak her zaman kodunuzun okunaklığını artırır ve bir değişiklik olduğunda tek bir hareket ile her yerde o değişikliği yapmanızı sağlar. Fonksiyonların genel avantajı bunlarla bitmiyor: Fonksiyonlar parametre aldığı için fonksiyonunuza ilettiğiniz parametrelere göre farklı sonu alabilir veya farklı bir işlem gerçekleştirebilirsiniz. Fonksiyonlar bir nevi macro gibi düşünebilirsiniz ama bazı yerlerde fonksiyonlar olmadan mantığını oluşturmak nerdeyse imkansızdır. Örneğin callback dediğimiz bazı fonksiyon tipleri vardır ve eventListenerde bile onları kullanıyorsunuz.

Bu arada her yerde fonksiyon yazmanıza tabiki gerek yok örneğin a mı büyük b mi gibi basit işlemler için direk script içinde kontrol edebilirsiniz ama bazen durum çok daha karmaşık oluyor veya bu a-b kıyaslama olayını birden çok yerde yapmanız gerekiyor ozaman fonksiyon can kurtarıyor.
Hocam öyleyse bu return'nün yazıldıgı yerde veriyi geri döndürme ve yazıldığı yerden sonraki kodları bloke etme özelliği var diyebiliriz galiba(koşul ifadesi olan switch case'deki break gibi kodda return yazılan yerde kodu kırdıgını ve buraya kadar olan değerin artık baz alıcağı belirtilir break'dan farkı döndürme işlemi yapar yani sadece oraya kadar olan değer döndürülür döndürülmeden kasıt bu herhalde yanlış anlamadıysam!).Fakat kafama takılan kısım şura örnek vermişsin ya(örnek gayet açıklayıcı bu arada)Mesela bir fonksiyon tanımlamışsın 'buyukSayi' adinda sonrada iki parametre vermişsin mesela biz veri tutsun diye değişkenleri kullanırız burada parametre kullanarak bir nevi değişken atamış mı oluyoruz ? Yada parametre kullanmasaydın önceden oluşturulmuş bir değişkendeki değerimi kullanıcaktın ? Yani neden parametre ihtiyacı doğuyor bu fonksiyonu oluştururken.Neyse sonra içinde return olan if koşulu ile şart belitmişsin a,b'den büyükse büyük olan a'yı döndür ve burdan sonrasını okuma demiş oluyorsun fakat olduki if değeri karşılanmadı koş ifadesi devam ediyor else if'e geçiyor burdada b büyük ise a 'dan demiş oluyorsun ve öyle bir durum var ise b'yi döndür kodun buradan sonrasına devam etme diyorsun.else'dede iki koşulda sağlanmazsa "alakasız cevap" değeri dönüyor ve fonksiyon sonlanıyor.Fakat şimdi burada biz return'a neden ihtiyaç duyuyoruz onu anlamadım.! Şimdi bide kodun return'suz halini baz alırsak şimdi yine fonksiyonu yazdın parametreleri verdin if'i yazdın parametre değerindeki a,b'den büyük olan durum oluştu fakat sen return kullanmadın burda zaten a'nın büyük olduğu ortada js bunu biliyor.Birde kodun bittiğini return ile belirtmek zorunda neden kalıyoruz zaten if sadece koşulun sağlandığı durumda işleme alınıyor.Diğer koşullar çalışmaz haliyle a,b'den büyük olduğu için sadece if olan kısım çalışıcak.Atıyorum a parametresinde 10 değerini göndermişiz b'ye 5 e burada 10,5'den büyük o zaman a değeri fonksiyonun değeri olmuyormu ? bir daha neden döndürme işlemi vs yapıyoruz zaten döndürme olayını anlamadım neyi döndürüzyoruz nereye döndürüyoruz neden döndürüyoruz.Zaten js yukardan aşşağı soldan sağa okuma yaparak gidiyor fonksiyonda yukardan aşşağı okurken ilk if'te koşul sağlanıyor else if'e geçiyor bakıyor burada sağlanan bir koşul yok geçiyor e zaten else'de kendinden önceki koşulların sağlanmadığı durumlarda devereye giriyor.Burda kendinden önce çalışan bir koşul olduğu için buda çalışmıyor yani burada büyük olan a değeri kalıyor elde artık bu fonksiyonda a değeri tanımlı olmuş olmuyor mu ?Hiç return kullanmadık ki zaten koşul ifadelerinde işlem bitirmesi gerektiğini belirtme ihtiyacı yok diye biliyorum o amaçla return kullansak bile çünkü zaten koşul sağlanmazsa orası çalışmıyor.Burada istediğimiz sonucu sağlayan bir koşul olursa orada işlemi bitirmekse return'ü kullanmaktaki amaç tek if'de sadece almak istediğimiz koşulu yazarız return'ede gerek kalmaz.Biraz uzun oldu ama neden kafama yatmadığını ve kendimi tam anlamıyla ifade ettiğimi düşünüyorum.Belki kafama yatmadı ! Belkide yattı;ama mantıklı gelmiyor ?Kafamda deli sorular yardım pls :) Tşk cevap için bu arada.
 
Son düzenleme:
Şunun üstünden biraz daha açıklayıcı bir şekilde geçeceğim.
Sorularınızı kademeli bir şekilde çözelim. Şu örnekleri bir inceleyin.

JavaScript:
function buyukSayi1(a,b) {
    // Burdaki a ve b aslında birer lokal değişken görevi görüyor
    if(a > b) {
        return a
    }
    else {
        return b
    }
}

// Dönen değer deneme1 değişkenine atanacaktır
const deneme1 = buyukSayi1(2,6) // Burda 6 sayısı dönecektir;
// Dönen değer deneme2 değişkenine atanacaktır
const deneme2 = buyukSayi1(9,4) // Burda 9 sayısı dönecektir;

// Soru 1 Parametre neden lazım ve parametresiz neler yapılabilir

function buyukSayi2() {
    // Burdaki a ve b aslında birer lokal değişken görevi görüyor
    if(sayi1 > sayi2) {
        return sayi1
    }
    else {
        return sayi2
    }
}

let sayi1 = 4;
let sayi2 = 5;
// Aynı diğer örneklerdeki gibi büyük sayı dönecektir ama deneme4 e bakın
const deneme3 = buyukSayi2();

// Parametre kullanmadığınız için burda değişkenler her seferinde üst dizin değişkenlerden değişiklik yapmanız gerekiyor aksi takdirde her seferinde aynı sonucu alacaksınız.
sayi1 = 7;
sayi2 = 3;
const deneme4 = buyukSayi2() // Fonksiyona iletmeniz gereken değişken sayısıda arttıkça parametrelere çok daha kullanışlı tek seferlik değişkenler gözüyle bakmaya başlayabilirsiniz.
// Bu işin başka dezavantajı özellikle obje gibi değişkenleri kullandığınızda ona referans yoluyla bağlı diğer değişkenlerdede değişiklik yaşanacaktır ve bu beklenmedik bir sonuca yol açabilir.

// Soru 2 Return kullanmasam ne değişiyor
function buyukSayi3() {
    // Burdaki a ve b aslında birer lokal değişken görevi görüyor
    if(sayi1 > sayi2) {
         sayi1 // Burda hiçbirşey dönmeyecek
    }
    else {
         sayi2 // Burdada hiçbirşey dönmeyecek
    }
}

const deneme5 = buyukSayi3() // Sonuç undefined ve deneme5 değişkenine hiçbir atanma olmadı

// Bunun global çalışan versiyonu yapılabilir

let sonuc = 0;
function buyukSayi4(a,b) {
    if(a > b) {
         sonuc = a;
    }
    else {
         sonuc = b;
    }
}

buyukSayi4(3,7)

// Burda gördüğünüz gibi sonuç değişkenini değiştirdik ve return kullanmadık ve buda yazılımda bazen kullanılan bir konsept olsada aynı fonksiyonu 2 nci kez kullanım için uygunsuz kılıyor

let sonuc2 = 0;
buyukSayi(5,2) // Gördüğünüz gibi return olmadığı için tekrardan ona önceden atadığımız sonuc1 e yazıyor ve sonuc2 ye yeni bir değer atanmıyor.

let sonuc3 = buyukSayi(6,1) // sonuc3 te başarısız çünkü fonksiyonumuz hiçbirşey döndürmüyor ve sonuç undefined olacaktır
 

Geri
Yukarı