Şimdi Ara

Return komutu tam olarak ne işe yarıyor(Java)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
21
Cevap
1
Favori
13.296
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
1 oy
Öne Çıkar
Sayfa: 12
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • İngilizce bir kaynaktan çalışıyorum, fakat tam olarak anlayamadım. Fonksiyonlardan sonra bunu anlattı ve aşağıdaki ödevleri yaptırdı. Tamam ezbercilikle yaptım ödevleri ama mantığını tam olarak anlayamadım, neden "console.log" kullanmıyoruz da return kullanıyoruz? Ödevler aşağıda, ödevler üzerinden yardımcı olursanız daha iyi olur. Teşekkürler.


    quote:

    // Define quarter here.
    var quarter = function (number)
    {
    return (number/4);--------------> mesela ben buraya neden return yazdım, console.log yazsam ne değişir? ya da direkt number/4 yazsam hiçbir şey yazmasam da bu kod yürümez mi? return'un tam olarak işlevi nedir burda?
    };

    if (quarter(24) % 3 === 0 ) {
    console.log("The statement is true");
    } else {
    console.log("The statement is false");
    }







  • fonksiyon çağırıldıktan sonra geri değer döndürmeye yarar "return". Mesela senin yazdığın quarter(24) kısmında fonksiyona gidecek. number kısmına 24 koyacak ve return ile 24/4 yani 6 döndürecek. Yani şu kısım

    if (quarter(24) % 3 === 0 )

    şu hale gelecek

    if (6 % 3 === 0 )
  • quote:

    Orijinalden alıntı: asdfg_1453

    fonksiyon çağırıldıktan sonra geri değer döndürmeye yarar "return". Mesela senin yazdığın quarter(24) kısmında fonksiyona gidecek. number kısmına 24 koyacak ve return ile 24/4 yani 6 döndürecek. Yani şu kısım

    if (quarter(24) % 3 === 0 )

    şu hale gelecek

    if (6 % 3 === 0 )

    Hocam cevabın için sağol fakat kafama takılan bir şey var, return'u oraya yazmasam yine dediğin şeyler olmaz mı? Yani yine 24ü fonksiyonda yerine yazıp işlemleri yapmaz mı?
  • 24 ü yazar ama geriye 6 değerini alamazsın.
  • quote:

    Orijinalden alıntı: Do Bemol Kerim

    quote:

    Orijinalden alıntı: asdfg_1453

    fonksiyon çağırıldıktan sonra geri değer döndürmeye yarar "return". Mesela senin yazdığın quarter(24) kısmında fonksiyona gidecek. number kısmına 24 koyacak ve return ile 24/4 yani 6 döndürecek. Yani şu kısım

    if (quarter(24) % 3 === 0 )

    şu hale gelecek

    if (6 % 3 === 0 )

    Hocam cevabın için sağol fakat kafama takılan bir şey var, return'u oraya yazmasam yine dediğin şeyler olmaz mı? Yani yine 24ü fonksiyonda yerine yazıp işlemleri yapmaz mı?

    java bilmiyorum ama c ve c++ taki mantık gibidir büyük ihtimalle. Yani şöyle oluyor; fonksiyon çağırılınca stack (yani programa ayrılan ram bölgesi) te kendine ait local değişkenler tanımlanıyor fonksiyona. Fonksiyonun işi bittiğinde ise bu ram bölgesinden kaldırılıyor hepsi. Yine aynı şeyler olur fonksiyon 24 ü koyup 6 yı bulur ama return ile o değeri çağırdığın yere döndürmezsen o sonuç uçar gider fonksiyonun işi bitince.




  • quote:

    Orijinalden alıntı: asdfg_1453

    quote:

    Orijinalden alıntı: Do Bemol Kerim

    quote:

    Orijinalden alıntı: asdfg_1453

    fonksiyon çağırıldıktan sonra geri değer döndürmeye yarar "return". Mesela senin yazdığın quarter(24) kısmında fonksiyona gidecek. number kısmına 24 koyacak ve return ile 24/4 yani 6 döndürecek. Yani şu kısım

    if (quarter(24) % 3 === 0 )

    şu hale gelecek

    if (6 % 3 === 0 )

    Hocam cevabın için sağol fakat kafama takılan bir şey var, return'u oraya yazmasam yine dediğin şeyler olmaz mı? Yani yine 24ü fonksiyonda yerine yazıp işlemleri yapmaz mı?

    java bilmiyorum ama c ve c++ taki mantık gibidir büyük ihtimalle. Yani şöyle oluyor; fonksiyon çağırılınca stack (yani programa ayrılan ram bölgesi) te kendine ait local değişkenler tanımlanıyor fonksiyona. Fonksiyonun işi bittiğinde ise bu ram bölgesinden kaldırılıyor hepsi. Yine aynı şeyler olur fonksiyon 24 ü koyup 6 yı bulur ama return ile o değeri çağırdığın yere döndürmezsen o sonuç uçar gider fonksiyonun işi bitince.

    Güzel bir teknik açıklama :-)
    inşallah arkadaş anlamıştır tabi.

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • quote:

    Orijinalden alıntı: asdfg_1453

    quote:

    Orijinalden alıntı: Do Bemol Kerim

    quote:

    Orijinalden alıntı: asdfg_1453

    fonksiyon çağırıldıktan sonra geri değer döndürmeye yarar "return". Mesela senin yazdığın quarter(24) kısmında fonksiyona gidecek. number kısmına 24 koyacak ve return ile 24/4 yani 6 döndürecek. Yani şu kısım

    if (quarter(24) % 3 === 0 )

    şu hale gelecek

    if (6 % 3 === 0 )

    Hocam cevabın için sağol fakat kafama takılan bir şey var, return'u oraya yazmasam yine dediğin şeyler olmaz mı? Yani yine 24ü fonksiyonda yerine yazıp işlemleri yapmaz mı?

    java bilmiyorum ama c ve c++ taki mantık gibidir büyük ihtimalle. Yani şöyle oluyor; fonksiyon çağırılınca stack (yani programa ayrılan ram bölgesi) te kendine ait local değişkenler tanımlanıyor fonksiyona. Fonksiyonun işi bittiğinde ise bu ram bölgesinden kaldırılıyor hepsi. Yine aynı şeyler olur fonksiyon 24 ü koyup 6 yı bulur ama return ile o değeri çağırdığın yere döndürmezsen o sonuç uçar gider fonksiyonun işi bitince.

    Hocam tam olarak oturtamadım hala ama anladım sanırım hafiften ne işe yaradığını, ileride kullandıkça oturur diye umuyorum. Çok sağolun




  • quote:

    Orijinalden alıntı: Do Bemol Kerim

    Hocam tam olarak oturtamadım hala ama anladım sanırım hafiften ne işe yaradığını, ileride kullandıkça oturur diye umuyorum. Çok sağolun

    Şöyle söyleyeyim. Fonksiyon içinde üretilen değerin nasıl kullanılması gerektiği çoğu zaman belirsizdir. Eğer fonksiyon içinde konsola yazarsan o fonksiyon sadece değeri konsola yazma işini yapmış olur başka işe yaramaz. Fakat üretilen değeri return ile döndürürsen o değeri her şekilde kullanırsın. İstersen konsola yazarsın, istersen textbox a yazarsın, başka bir fonksiyona girdi olarak alırsın, internet üzerinden gönderirsin vs. işte aklına ne gelirse.

    Ayrıca java kütüphanesindeki hazır fonksiyonları senin dediğin şekilde yazmış olsalar biz nasıl kullanacaktık onları? Sonucu bana vermedikten sonra konsola yazmış falan ben ne yapayım onu?




  • iki iş için kullanılabilir. ilki bir metot içerisinde belli koşullar oluştuğunda metotun çalışması son bulsun istiyorsan "return;" yazarsın ama bu temel görevi değildir.

    temel görevi metot için tanımladığın türde veriyi işaret etmektir. sen metodu yazarken string, int, long[]... ihtiyacına göre tanımlarsın ve return kullanmazsan hata verdiğini görürsün. çünkü tanımladığın şeyin bir karşılığı yoktur onu return'le işaret edersin. ( hata giderme önerisi olarak "return null;" önerir. null yerine hangi sonucu görmek istiyorsanız onu yazmalısınız )

    örneğin rast gele bir sayı elde etmek isteyince Math.random()'u kullanırız. ve bunu kullanmak için elimizdeki veri türü double olmalıdır çünkü bu Math sınıfının random() metodu geriye double türünde veri döndürür. görmek için "double a = Math.random();" yazın. sonra ctrl basılı tutarak random'un üzerine tıklayın sizi Math classında metodun yazılı olduğu yere götürecek.(eclipse'de bunlara ulaşmak için dosya yolunun gösterilmiş olması gerek, netbeans'de problem yok)
    Rast hele sayı elde etme kodları görünmediği için göreceğimiz tek şey "return this....;" şeklinde birşey olacaktır. bizim rast gele sayı olarak kullandığımız sayının nerden geleceğini return komutu göstermiş oldu.

    malesef herşey toplama işlem kodu yazmak kadar kolay olmuyor. program yazmanın bir üslubu vardır. herşey alt alta düz yazı şeklinde yazılırsa kod kalabalığı arttıkça içinden çıkılmaz hale gelir. bunun için bazı kod kümeleri metotlar altında gruplara ayrılır. böylece aynı kod gurubu benzer işlemlerde sadece metot ismi yazılarak defalarca kullanabilir. metot içerisinde bir sürü veri yığını olur ve hangi verinin sonuç olarak metodun çağrıldığı yere gönderileceğini return komutu gösterir.

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • Guest-BF8E9B238 G kullanıcısına yanıt

    Hocam konuyu hortlatmış olucam ama hiç umurumda değil. Allah senden razı olsun. Mesajınızın üzerinden 7 yıldan uzun bir süre geçmiş neredeyse 8 yıl olacak ama değeri hiç eksilmemiş. Ne zamandır aklıma yatmamıştı bu konu. Sizin dedikleriniz adeta beni büyüledi. Aydınlandım hocam sizin sayenizde. Çok teşekkür ediyorum. Duacınız olucam hocam. Sağlıcakla Kalın :)

  • Fonksiyon (object oriented dillerde metod) bir nevi kapalı kutu gibi düşünmeniz lazım. Bu fonksiyona bir takım değerler gönderirsiniz, o işlemi yapar, eğer işlemin sonucu, fonksiyonu çağırdığınız yerde size lazımsa, return deyip sonucu burda bir başka değişkene atayabilirsiniz. Eğer sonuç fonksiyonu çağırdığınız yerde size lazım değilse, return etmenize gerek yoktur.


    Örneğin;


    Verdiğiniz 2 sayıyı dosyaya alt alta yazan bir fonksiyon yazdığınızda bu işlemin sonucu size lazım olmaz.


    public void sayiYaz(int a, int b){

    ...

    }


    Bunu kullanmak istediğinizde;


    sayiYaz(3,5);


    gibi çağırabiliriz.


    Fakat iki sayıyı toplayıp, cevabı bize fonksiyonu çağırdığımız yerde lazımsa, o zaman return gerek.


    public void topla(int a, int b){

    int c = a + b;

    return c;

    }


    bunu kullanırken;


    int sonuc = topla(3,5);


    gibi kullanırız.


    sayının toplamıda fonksiyon çalıştığında sonuc değişkeni içine atanır.





  • The_eXXe kullanıcısına yanıt

    Çok teşekkür ediyorum hocam aklımdaki sorulara cevap oldunuz sağolun.

  • The_eXXe kullanıcısına yanıt

    Hocam bugün Call bye Reference diye bir konu öğrendim. Kodumu sizinle paylaşmak istiyorum.



    #include <stdio.h>


       void dairede_bul (int r, float *p_alan, float *p_cevre){

              *p_alan = 3.14 * (r) * (r);

              *p_cevre = 2 * (3.14) * r;

           }



       int main () {


            float alan,cevre;

            float yaricap = 4.0;


            dairede_bul(yaricap,&alan,&cevre);


            printf ("Alani: %.2f - Cevresi: %.2f - Yaricapi: %2.f\n",alan,cevre,yaricap);


            return 0;


           }


    Biz pointerlar yardımıyla zaten main fonksiyonundaki değişkenlerimiz üstünde oynama yapabiliyormuşuz. Ben bunu öğrendikten sonra return ifadesinin gerek olmadığını düşünüyorum. Siz ne dersiniz. Yukarıda void kullanarak return kullanmadan istediklerimi yaptırdım. Ayrıca bildiğiniz gibi return komutunu kullanınca sadece tek bir değer döndüyor. Ben birden fazla değer döndürmek istediğimde işime yaramıyor. Değerli görüşleriniz benim için çok önemli hocam. Sizden bir şeyler öğreniceğimi düşünüyorum. Teşekkürlerimi sunar sizin değerli görüşünüzü beklerim hocam. Saygılar.





  • Hilal Bıyıklı Bozkurt kullanıcısına yanıt

    Call by reference tum diller tarafindan desteklenmiyor, Java da bunlardan biri. Primitif turlerde degerin kendisi, komplex turlerde ise referansi kopyalanarak gecirilir. Ayrica her zaman fonksiyona gecirdiginiz parametrenin degisime ugramasini istemeyebilirsiniz. Oyle bile olsa, dilin size sundugu ozelliklerden kacinmanin bir anlami veya faydasi da yok. Yaptiginiz sey kodun okunmasini da zorlastiriyor. Benim beklentim arguman olarak gecirdigim parametrelerin fonksiyon icinde kullanilmasi ve bana bir sonuc donulmesi. Burada bir fonksiyona 2 is birden yaptiriyorsunuz. Bu da dogru degil. Performansin cok kritik oldugu, belki gercek zamanli sistemler vs disinda kod okunabilirligi her seyin uzerindedir.




    < Bu mesaj bu kişi tarafından değiştirildi mosahin -- 27 Aralık 2020; 11:55:53 >
  • mosahin M kullanıcısına yanıt

    Her cümlenizden faydalanmaya çalışıyorum hocam. Çok sağolun. En derinden teşekkürlerimi sunuyorum hocam. Sağlıcakla.

  • quote:

    Orijinalden alıntı: Hilal Bıyıklı Bozkurt

    Her cümlenizden faydalanmaya çalışıyorum hocam. Çok sağolun. En derinden teşekkürlerimi sunuyorum hocam. Sağlıcakla.

    Rica ederim, ne demek.

  • quote:

    Orijinalden alıntı: Hilal Bıyıklı Bozkurt

    Hocam bugün Call bye Reference diye bir konu öğrendim. Kodumu sizinle paylaşmak istiyorum.



    #include <stdio.h>


       void dairede_bul (int r, float *p_alan, float *p_cevre){

              *p_alan = 3.14 * (r) * (r);

              *p_cevre = 2 * (3.14) * r;

           }



       int main () {


            float alan,cevre;

            float yaricap = 4.0;


            dairede_bul(yaricap,&alan,&cevre);


            printf ("Alani: %.2f - Cevresi: %.2f - Yaricapi: %2.f\n",alan,cevre,yaricap);


            return 0;


           }


    Biz pointerlar yardımıyla zaten main fonksiyonundaki değişkenlerimiz üstünde oynama yapabiliyormuşuz. Ben bunu öğrendikten sonra return ifadesinin gerek olmadığını düşünüyorum. Siz ne dersiniz. Yukarıda void kullanarak return kullanmadan istediklerimi yaptırdım. Ayrıca bildiğiniz gibi return komutunu kullanınca sadece tek bir değer döndüyor. Ben birden fazla değer döndürmek istediğimde işime yaramıyor. Değerli görüşleriniz benim için çok önemli hocam. Sizden bir şeyler öğreniceğimi düşünüyorum. Teşekkürlerimi sunar sizin değerli görüşünüzü beklerim hocam. Saygılar.

    Her dil desteklemez pointer'ı. Call by reference yaparken pointer'a ihtiyacın var. (java mesela desteklemez)

    Javada immutable diye bir kavram vardır. Bir obje yaratıldıktan sonra değiştirilemiyorsa o objelere immutable denir. Örneğin String tipi immutable'dır. Sen bir string'i değiştiren bir fonksiyonu çağırdığında orjinal string'in değişmez. O fonksiyon sana yeni bir String döner.


    Örneğin;


    String a = "Test"

    String b = a.substring(0, a.length-2);


    burdaki b "Te" olur, ama a değişkeni hala "Test"' kalır.


    Şimdi hocam a'yı değiştirsek ne olurki, neden b diye yeni bir string yapıp içine sonucu "Te" yi koyuyoruzki diye sorabilirsin. Sor tabi  


    Asıl problem multithreading uygulamalardır. Bir variable'ı (a diyelim) pointer vasıtasıyla bir thread değiştiriyorken, diğer thread'lerde a variable'ı için "inconsistent state" durumu oluşuyor. Yani 1. thread sürekli a'yı değiştirdiği için (pointer vasıtasıyla) diğer thread'ler bu variable'ın o anda nasıl bir değere sahip olduğunu bilemiyor. Buna inconsistent state deniyor ve böyle durumlarda hata ayıklaması zor olan mantık hataları oluşabiliyor.


    O zaman pointer kötü bişi diye de düşünebilirsin. Ama değil. Bazen pointer'lar o kadar çok işini kolaylaştırırki onada ihtiyaç oluyor.

    Örneğin; pointer kullanarak bir fonksiyon içine başka bir fonksiyonu parametre ile gönderebilirsin. Java pointer desteklemediği için bu tip bir ihtiyacın olduğunda reflection api'ını kullanman gerekiyor.


    Kısacası sana tavsiyem:

    Pointer'ların nasıl çalıştığını (call by reference'da pointer kullanıyorsun) bil. Fakat sen kod yazarken call by value yap ve return et. (Immutable yap yani) İlerde kod yazarken burda referans kullanmam lazım dediğin vakit gelecek o zaman kullanırsın. (Mutable)





  • The_eXXe kullanıcısına yanıt

    Hocam yaznınız adeta benni benden aldı. Bütün nedenleri ve sonuçlarıyla anlatmışsınız. Ne kadar teşekkür etsem azdır. Sağolun. Ben bu işlerde yeni olduğum için neyi nerede kullanacağımı tam kestiremiyorum ama sayenizde çok kıymetli bilgiler öğrendim. Allah sizden razı olsun hocam.


    < Bu ileti mobil sürüm kullanılarak atıldı >
  • hepsini okudum ama hala oturtamadım şu mevzuyu,aptala anlatır gibi anlatabilecek biri varsa şu return mevzusunu anlatırsa çok sevinirim

  • Return kelime anlamiyla "don" veya "dondur" demek Ingilizce'de. Yani bir yerden donmek veya dondurmek anlamina gelir. Java icin konusursak, bu komutun anlami icinde bulunulan fonksiyondan geri don, nereden geldiysen oraya git anlamina gelir. Yanina yazdigin deger de, donulen yere dondurulur. Soyle dusunebilirsin bu kelimeyi. Bir otobandan araba ile yola ciktin. Icinde 8 serit var diyelim. Bu yol senin main fonksiyonun olsun. Yani Java'da ki giris fonksiyonu. Sonrasinda saptigin her yolda seritlerin gitgide azaldigini dusun, ornegin tabela gordun, kopruden once son cikis yaziyor =) Bu yola girdin. Sonrasinda bir miktar ilerledikten sonra (yola gezinti yapmak icin ciktigini varsayiyorum), bu saptigin yoldaki manzarayi vs gordun. Ve dedin ki ben geri donmek istiyorum. Burada kullandigin return komutu 2 sey yapacak. Biri seni o saptigin yolun tam girisinde geri birakacak, boylece ana yoldan devam edebileceksin, ve ayni zamanda oraya dondugunde oraya dondurmek istedigin ne varsa, cektigin fotograflar diyelim, seninle birlikte gelecek. Burada analoji yaptim, belki benzetme sayesinde kafanda daha rahat oturur diye. Teknik aciklamalari zaten yeterince mevcut =)





  • 
Sayfa: 12
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.