‫Tekrar hoş geldiniz.
‫Bu videoda önemli bir kavramdan, yani geri dönüşten bahsetmek istiyorum.
‫Python'da fonksiyonlarla çalışırken çokça göreceğimiz anahtar bir kelimedir.
‫Bir bakalım.
‫Diyelim ki sum adında bir fonksiyon yaratmak istiyorum, bu arada Python'da zaten var, ama biz kendi fonksiyonumuzu
‫yaratacağız ve bir numara için bir numara diyeceğim.
‫Ve iki numara, toplam fonksiyonumuz bir numara artı iki numarayı toplayacak, güzel ve basit bir fonksiyon.
‫Şimdi dört ve beş numara ile biraz çalışırsam, tahmin edin ne olacak?
‫Koşmaya gidiyorum.
‫Ve hiçbir şey olmuyor, bu sizin için şaşırtıcı olmayabilir çünkü hiçbir şey basmıyoruz.
‫Doğru.
‫Ama ya burada baskı yaparsam?
‫Bu değişiklik.
‫Bakalım.
‫Hmm.
‫Ben hiç almadım.
‫Beklediğin bu muydu?
‫Ve daha önce hiç görmedik, değil mi?
‫Yani, bir listemiz olduğu zamanları hatırlayın, diyelim ki bir, iki, üç, ve sonra onu temizlemek gibi
‫bir şey yaptık.
‫Bizim ED'de.
‫Bize bu küçük oku verdi ve hiçbir şey söylemedi.
‫Listelerde clear gibi bir şeyin asıl listeyi değiştirdiği, her şeyi temizlediği ve listeyi boşalttığı, ancak
‫yeni bir liste döndürmediği fikrinden bahsetmiştik.
‫Sadece mevcut listeyi değiştirir, ancak bunun yerine bize hiçbir şey döndürmez.
‫İşlevler de aynen böyledir.
‫Her zaman bir şey döndürmeleri gerekir ve burada return anahtar sözcüğü yokmuş gibi hiçbir şey döndürmediklerinde,
‫otomatik olarak hiçbir şey döndürmez.
‫Yani burada return gibi bir şey yoksa, her zaman hiçbir şey döndürmeyecektir.
‫Ancak geri dönüşü eklersek, ikinci satıra geçer geçmez söyleyecektir.
‫Hey.
‫Bu fonksiyondan çıkmanızı istiyorum.
‫Ve bu fonksiyondan çıktığınızda, bu ifade bize ne veriyorsa onu döndürmenizi istiyorum.
‫Çalıştır'a tıklarsam.
‫Dokuz mu alacağım?
‫Bunu on artı beş olarak değiştirirsek, 15 elde ederiz.
‫Ve bu, fonksiyonlar için iyi bir genel kuraldır, çünkü fonksiyonlar iki şey yapabilir, doğru.
‫Birincisi, bir şey iade edebilir.
‫Yani fonksiyonun sonunda, her neyse, fonksiyon çalıştırıldıktan sonra, ya hiçbir şey döndürmeyiz
‫ya da bir tür değer, bir tür veri türü döndürürüz ya da hiçbir şey döndürmeyen ama belki bir şeyleri değiştiren
‫bir fonksiyona sahip olabiliriz.
‫Yani, örneğin, yazdırabilirim.
‫Merhaba.
‫Ve eğer buraya koşsaydım.
‫Hiçbirini döndürmüyorum çünkü böyle bir dönüş ifadem yok.
‫Ancak, benim fonksiyonum bir şeyi değiştiriyor.
‫Bu metnin görünüşü doğru mu?
‫Bizim için merhaba yazıyor.
‫Yani bir fonksiyon ya programımızdaki bir şeyi değiştirir ya da bir şey döndürür.
‫Ve bu, daha sonra fonksiyonel programlama hakkında konuştuğumuzda ele alacağımız oldukça gelişmiş
‫bir konudur.
‫Ancak fonksiyonlarla ilgili iyi bir kural şudur: Bir fonksiyon tek bir şeyi gerçekten iyi yapmalıdır.
‫Ve genellikle bir fonksiyon bir şey döndürmelidir.
‫Şimdi, bu, birden fazla şey yapan veya bir şey döndürmeyen herhangi bir işlevin kötü olduğu
‫anlamına gelmez.
‫Ancak kodunuzu basit ve okunabilir hale getirmek için bu iki kurala sahip olmak genellikle iyi bir uygulamadır.
‫Örneğin, burada yazdırma ve toplama işlemlerim varsa, bu işlev birden fazla şey yapıyor demektir.
‫Baskı konusunda endişeleniyor ve aynı zamanda bir şey hakkında da endişeleniyor.
‫Ve tanımı.
‫Bu fonksiyon toplam olarak adlandırılır.
‫Yani, bunu bilmiyor ya da görmüyor olsaydım ve tek yaptığım biraz koşmak olsaydı.
‫Bence baskının yüksek olması şaşırtıcı olurdu çünkü adı ne yaptığını tam olarak açıklamıyor.
‫Yani, bunun özetlenmesini bekliyorum.
‫Programım neden merhaba diyor?
‫Bu nedenle, fonksiyonumuzun tek bir şeyi ve sadece tek bir şeyi gerçekten iyi yaptığından emin olmak istiyoruz, çünkü daha sonra göreceğimiz
‫gibi, farklı fonksiyonları birleştirebilir ve birlikte çalıştırabiliriz.
‫Ve ayrıca bir şey döndürdüğümüzden emin olmak istiyoruz çünkü bu şekilde yapabileceğimiz şey
‫aslında bu dönüş değerini bir değişkene atayabiliriz.
‫Örneğin, toplam on toplamına eşittir diyebilirim.
‫Beş.
‫Ve bu fonksiyon bir şey döndürdüğünden ve tamamlandığında, çalışan değer olarak 15'e sahip olacaktır.
‫Burada yaptığımız da aynı şey.
‫Ve işte işin güzel kısmı.
‫Şimdi belki toplamda 10'dan fazla koşabilirim.
‫Şimdi bunları teker teker inceleyelim.
‫Fonksiyonumu tanımladığımda, python yorumlayıcısı şöyle diyecektir: Pekala, some'ın ne olduğunu biliyorum.
‫Şimdi tanımladınız.
‫Bunu hafızamda tutacağım.
‫Yedinci satıra kadar devam edecek ve şöyle diyecek: Hey, bir toplam değişken istiyorum
‫ve bu toplam değişkenin on beş gibi bir değere eşit olmasını istiyorum.
‫Ve toplam python'a herhangi bir şey atamadan önce, yorumlayıcı bazı şeyler söyleyecek.
‫Yine ne var?
‫Oh burada hatırlıyorum, hafızamda OC'de bazılarına on ve beş argüman vereceğim.
‫Bu yüzden gidip o işlevi çalıştıracak.
‫Bu kapanış parantezini bitirir bitirmez, toplamın içine girecek.
‫Diyecek ki, hey, bir numara ona eşit olacak, hey iki numara beşe eşit olacak.
‫Şimdi ikinci satıra geçiyoruz ve şöyle diyecek: Hey, senden on artı beşi toplamanı istiyorum çünkü bu değişkenlerin ne olduğunu
‫biliyorum.
‫Ve bunu bitirdiğinizde ve bu 15'e dönüştüğünde, geri dönmenizi istiyorum.
‫Böylece Python yorumlayıcısı, bazılarını çağırmayı bitirdiğinde, hey, 15 değerini
‫toplam değişkenine ata diyecek ve sonra bir sonraki satıra geçecektir.
‫Hey, bir şey yazdırmak istiyorum.
‫Ne yazdırmak istiyorsunuz?
‫Bunu basmak istiyorum.
‫Diyecek ki, hey, biraz ne var?
‫Bazılarının ne olduğunu biliyorum.
‫Hafızamda var.
‫Ve sonra tekrar, on diyecek.
‫Ve bir sonraki tartışma toplam olacaktır.
‫Hey, hadi toplanalım.
‫Hafızamı yoklayayım ve 15 olduğunu öğreneyim.
‫Yani 15 demek gibi bir şey.
‫Bu da fonksiyonların gücü, değil mi?
‫Bir şeyleri döndürüp değişkenlere atayabilir ve bu şekilde çağırabilirim.
‫Ve eğer bunu daha da basitleştirmek istersem, toplam yerine bazılarını çalıştırmaya
‫devam edebilirim.
‫Ve şuna bak.
‫Şimdi hepsini tek bir satırda topladım ve Çalıştır'a tıkladığımda
‫Tekrar.
‫Hâlâ çalışıyor.
‫Tamam.
‫Peki ya böyle bir şey yaparsak?
‫Bazılarını tanımla desem ve sonra buranın içinde başka bir şey tanımla desem ne olur?
‫Fonksiyonu ve bu fonksiyon bir ve iki numaralarını alır.
‫Ve burada, nihayet geri dönüyoruz, bir numara.
‫Ve iki numara.
‫Hmm.
‫Bunu test edelim.
‫Sizce ne olacak?
‫Öncelikle, toplamın 10 artı 20'ye eşit olduğunu varsayalım.
‫Ve sonra toplamı basacağım.
‫Çalıştır'a tıklarsam.
‫Ben hiç almadım.
‫Şimdi.
‫Nedenmiş o?
‫Ve bu sizin için açık olmalı, çünkü burada diyorum ki, hey, bazılarını tanımlamanızı istiyorum ve
‫fonksiyonla ne yapacağız?
‫Buranın içinde başka bir fonksiyon tanımlayacağım, ancak bu geri dönüş ifadesi aslında doğru
‫çalışmıyor.
‫Çünkü tek yaptığımız bu bloğun, bu kod bloğunun içinde.
‫Bu kısım mı?
‫Fonksiyonu tanımlıyoruz, ancak asla başka bir fonksiyonu çağırmıyoruz.
‫Yani bu hiçbir şey döndürmez.
‫Ve bu fonksiyonu çağırma yeteneğimizi kaybettik.
‫Peki bunu nasıl çözebiliriz?
‫Tek yol geri dönmek, değil mi?
‫Sonunda, girintinin doğru olduğundan emin olmalıyız ve başka bir func döndüreceğiz.
‫Geri dönüşü ekleyelim ve burada ne olacağını görelim.
‫Çalıştır'a tıklarsam.
‫Pekala, bu işlevi şimdi anlıyorum.
‫Yani Total, döndürdüğümüz bu işleve eşit olacak ve bellekte yer alacak.
‫Tamam.
‫Ama istediğim sonucu alamıyorum.
‫Doğru.
‫Neden peki?
‫Çünkü.
‫Bu fonksiyonu çağırmıyoruz.
‫Bunu yapabilmemiz için birkaç yol var.
‫Burada parametreleri ya da argümanları verebiliriz.
‫Diyelim ki 1020 ve eğer Çalıştır'a tıklarsam.
‫30 alıyorum ya da verdiğimiz her şeyi burada tutmak istiyorsak, sadece başka bir func diyebilirim.
‫Yani bir ve iki numarayı verirsek ve çalıştır'a tıklarsam.
‫Hey, şuna bak.
‫Ben 30 alıyorum.
‫Şimdi bu videoyu tekrar tekrar izlemeniz gerekebilir çünkü zihninizi biraz zorluyor.
‫Dürüst olmak gerekirse, bu işlev pek iyi değil çünkü çok kafa karıştırıcı.
‫İşlevinizin anlaşılması kolay olmalıdır.
‫Bu yüzden bunu biraz değiştirmek isteyebiliriz, belki de burada aynı parametre adlarına sahip olmak yerine.
‫Sadece açıklığa kavuşturmak için.
‫Belki bir ve iki diyebiliriz.
‫Ve sonra burada, geri döndüğümüzde, bu diğer işlevin, burada çağırdığımız bir ve iki numaralı parametreleri kullandığımı
‫açıklığa kavuşturmak için ve bir artı ve iki yapıyoruz.
‫Çünkü bu fonksiyon tanımı, bu şeylerin ne olduğunu gerçekten umursamıyor.
‫Sadece başka bir fonksiyon çağrıldığında önemser.
‫Şimdi, videoyu duraklatıp buna bakmanız ve belki biraz pratik yapmanız gerekiyorsa, bu tamamen anlaşılabilir
‫bir durumdur.
‫Ama size geri dönüşün gücünü göstermek istedim.
‫Tıpkı koşullu fonksiyonlarda olduğu gibi iç içe fonksiyonlara sahip olabilirsiniz, ancak fonksiyonunuzun bir
‫şey döndürmesine dikkat etmelisiniz, aksi takdirde hiçbir şey döndürmeyecektir.
‫Ve çoğu zaman bir fonksiyondan bir şey döndürmek isteyeceksiniz, böylece programlarımızda daha
‫sonra kullanabilmek için bir değişkene atadığımız bunun gibi bir şey yapabiliriz.
‫Bir sonrakinde görüşürüz.
‫Güle güle.
‫Son bir şey daha.
‫Bir return anahtar sözcüğü otomatik olarak işlevden çıkar, böylece buraya print gibi başka bir kod parçası eklersem.
‫Merhaba.
‫Ya da belki burada beş kişi bile dönebilir.
‫Hala geçerli olduğunu görüyorsunuz.
‫Ama bunu çalıştırırsam.
‫Hala 30 alıyorum çünkü yorumlayıcı beşinci ve altıncı satıra asla ulaşamıyor, çünkü bir fonksiyondan
‫bir şey döndürdüğümüz anda o fonksiyondan çıkıyor.
‫Bu kısmın fonksiyondan çıkmamasının nedeni, bu fonksiyonun içinde tanımlama yapıyor
‫olmamızdır.
‫Yani aslında bu kısmı çalıştırmıyoruz.
‫Sadece diyoruz ki, hey, kodumuzda başka bir fonksiyonun geldiğini gördüğümüzde, bunun ne olduğunu biliyoruz,
‫ancak onu çalıştırmayacağız.
‫Yani şöyle görünecek.
‫Ve return ifadesini görür görmez, çağrıldığında, "Pekala, bu
‫fonksiyondan bu değerle çıkıyorum" diyecektir.
‫Sadece küçük bir uyarı.