1. sayfa
Java 8 ile beraber bu ozellik geldi ki Java 8 2014 ten beri var. Lutfen kaynaklari yenileyelim. Lambda neymis ogrenelim. |
hocam ben lambda fonksiyonlar olamaz demedimki. ona bakarsaniz pythonda da lambda fonksiyonlar var. ama ayriyyeten birde normal fonksiyonlari ic ice kullanmamiza olanak sagliyor iste neden javada bu ozellik yok. Edit: bu arada java yi ogreniyorum daha oralara gelmedim. merakimdan bu konuyu actim. |
Cok isteresen statik olarak yine deklare edebilirsin. Ama dedigim gibi lambda yi bir variable a assign edip sonradan cagirabildikten sonra bu statik olayi gereksiz geliyor. |
yoksa başka türlü yapılabildiği için yoktur ![]() |
çünkü Java object-oriented. Her şey bir nesneye bağlı ve nesnenin de bir class'ı olmak zorunda, havada uçuşan metotlar/fonksiyonlar olamaz. lamba expression'da bile anonim bir nesne var, zaten yeni birşey değil sadece syntactic sugar. |
@funky-nd eksikligini hisstemediyseniz icim rahatladi dogrusu :D cunki birden icim daraldi java da boyle bi ozellligin olmamasindan dolayi. @seyfi84 hocam havada ucusan methodlar olamaz bu object-oriented bir dil demissiniz ama. C# da object oriented degilmi ? C++, Python da degilmi ? ozaman neden bunlarda boyle bir ozellik var java da yok ? yoksa java hepsinden dahami object-oriented, yada java dilinin bilmedigim ayri bir felsefesimi var. tesekkurler. |
Nested method derken rekürsif fonksiyonlardan bahsediyorsunuz, yanlış anlamadım değil mi? Java'da bu özelliğin olmadığını kim söylüyor? Gayet de var. Örnek:
|
Ha fonksiyon içinde fonksiyon tanımlamadan bahsediyorsun. Hayatımda hiç kullanma gereği duymadım ben de :D |
Java sadece object-oriented. Hello world yazmak icin bile class deyip baslarsin yazmaya. C++ ve python'da object-oriented mecburi degil, aradaki fark bu. Java'da bir global namespace de yok bu nedenle. Package ve class var (simdi bir de modul geldi Java9 ile). C#'ta da olmamasi lazim. Cunku metot diye bir veri türü yok. |
Bir dilin mümkün olan her özelliği içinde bulundurması onu en iyi dil yapmıyor çünkü. Bir programlama dili seçerken ilk düşüneceğin şeylerden biri de dilin sana nasıl bir abstraction sunacağıdır. Java karşılaştığın problemi nesne yönelimli programlamayla modellemene olanak verir. Bu tarz soyutlamalar iç içe geçmiş fonksiyonlara ihtiyaç duymazlar. Haskell, Scala gibi fonksiyonel diller ise sana daha farklı bir soyutlama çözümü sunar, o yüzden higher-order function'lar, recursive nested function'lar filan yazarsın. C++14'de yok yalnız bu olay. Python'dakinin kullanıldığını bugüne kadar görmedim. C#'da da yok. |
nested methodu ne yapacaksınız bir anlasam cevap verebileceğim ama. Zaten en temizi divide and conquer iken daha da birleştirip nested method yapmak bana mantıklı gelmedi. Algoritma olarak gerek duyduğunuz bir örneği söylerseniz biz de aydınlanırız :) |
Nested fonksiyonlar divide and conquer gibi paradigmalara karşıtlık oluşturmazlar yalnız. Örneğin A* algoritması çalıştıran bir class'ımız olsun. Java, C++ gibi dillerde cost hesaplayan heuristic fonksiyon class içindeki her elemanın erişebileceği bir fonksiyon iken fonksiyonel dillerde sadece move fonksiyonunun erişebileceği bir yapı. Buradaki mantık divide and conquer değil zaten, doğru abstraction. Nested fonksiyonlar dil loop'ları desteklemiyorsa recursive işlem yapmak için de kullanılır. Scala'dan bir örnek: def fibonacci(n: Int): BigInt = { |
Javascript'te lazım, çünkü o dilde class scope yok, namespace yok, package yok.. sadece function scope ve global scope var (block scope bile yeni eklendi). Function içinde function tanımlayıp sonra closure olarak export ederek ancak encapsulation sağlayabiliyorsun. Bir de şu use case için: diyelim bir fonksiyon yazdın, zamanla bu çok genişledi, parçalara bölmek istiyorsun, fakat ortaya çıkan parçaların o fonksiyon haricinde hiç kimseye faydası yok, yani gereksiz yere outer scope'u doldurmuş olacaksın, onun yerine fonksiyon içinde tanımlarsın ve dışardan hiçkimse erşemez, namespace'i pollute etmez. Bunun için de Java'da nested class/inner class olayı var zaten. |
hocam dedim ya merakimdan actim bu konuyu. ben gerek olup olmadigini bile blimiyorumki. bana cok normal geliyordu. ama gerek yokmus. bu arada herekese beni aydinlattigi icin tesekkurler. |
hocam herseyi bir class icinde yapmak nasil olabilirki diyelimki yaptik class lara ne isim koycaz yani gruplandirma cok ayri bir dert. |
1. sayfa
ic ice fonksiyonlara izin veren programlama dilleri:
C, C++, Python, .....
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.