w php można zadeklarować funkcję w zasięgu globalnym z funkcją.brak zwykłej "funkcji" w java?
jest to niemożliwe w java? wygląda na to, że każda funkcja jest w klasie jako metoda. więc wszystko jest OOP w java? nie ma kodu proceduralnego?
w php można zadeklarować funkcję w zasięgu globalnym z funkcją.brak zwykłej "funkcji" w java?
jest to niemożliwe w java? wygląda na to, że każda funkcja jest w klasie jako metoda. więc wszystko jest OOP w java? nie ma kodu proceduralnego?
Najbliższą rzeczą, którą można uzyskać w funkcji "swobodnego unoszenia się", jest funkcja statyczna, którą można wywołać jako kwalifikowaną nazwą klasy, np.
public class Foo {
public static void bar(){}
}
... gdzie indziej
Foo.bar();
Można dodać trochę cukru składniowej do tego, aby wyglądać jak to, co masz na myśli:
import static Foo.bar;
... gdzie indziej
bar();
Możesz również zaimportować funkcję samodzielnie: 'import static packagename.Foo.bar;' Ale jeśli zrobisz to za dużo to może stać się zagmatwany. – MatrixFrog
ahh, to właśnie miałem na myśli, dziękuję. –
Tak. Ale możesz zdefiniować metody statyczne, które ostatecznie mogą działać jako metody zawarte w klasie, ale można je wywoływać bez tworzenia instancji klasy. Oznacza to, że jeśli zdefiniujesz metodę bar
jako static
w klasie Foo
, może ona zostać wywołana jako Foo.bar()
.
Tak, zgadza się. Java jest ściśle OOP.
Zgadza się, nie ma kodu proceduralnego, wszystko jest obiektem zdefiniowanym przez klasę (z wyjątkiem kilku prymitywnych typów danych). Można jednak użyć metody statyczne:
public class MyClass {
public static void callMe() {
System.out.println("HEY");
}
}
public class MyOtherClass {
public void someMethod() {
MyClass.callMe();
}
}
język JVM oparte Scala nie pozwalają na tworzenie higher-order functions, które można przekazać wokół jako wartości.
Fajnie, więc Scala gen's up śmieci klasy anon dla ciebie. Naprawdę muszę usiąść i * przeczytać * moją cholerną książkę z serii Scala, aby zobaczyć, ile zamknięcia, "curry" i innych funkcji-rzeczy, w które się pakuje. – Roboprog
Mam książkę i przeczytam ją, a to jest dość potężne język. Zauważyłem jednak, że dziesiątki operatorów skrótów, które reprezentują te nowe funkcje, są nieco mylące i trudne do zapamiętania. Wydaje się, że łatwiej jest zacząć pracę z Ruby (szkoda, że jest dynamiczny i 50 razy wolniejszy niż w Javie, LOL). –
Ciągle słyszę, że Java jest duża - N razy szybciej niż Ruby. To może być prawdziwe dla x + = y rodzajów elementów matematycznych/pierwotnych, ale to NIE jest to, co zmierzyłem dla pewnego podstawowego łamigłówki: http://roboprogs.com/devel/2009.12.html (oczywiście te " benchmark "korzysta tylko z kilku statycznych metod, jedynymi instancjami dłubiącymi wokół GC któregokolwiek z języków są wbudowane łańcuchy) – Roboprog
O tak, OO indeed. Możesz jednak kodować pseudo proceduralne rzeczy w statycznej metodzie.
Można dokonać metody statyczne połączenia bez tworzenia obiektu
public class MyClass{
public static void m(){
...
}
}
MyClass.m();
Expanding na co wszyscy inni mówią, jeśli masz wiele takich funkcji, to jest wspólne dla grupy je razem w klasach które są pełne tylko statycznych metod, często nazywane "klasami użytkowymi". Pierwszy przykład, który przychodzi na myśl, to java.lang.Math, ale jest mnóstwo innych. Każda klasa z "Util" w nazwie prawdopodobnie podąża za tym wzorem.
Nie należy jive well well OOP. Nadal możesz zdefiniować publiczną metodę statyczną i wywołać ją z dowolnego miejsca, o czym wspomnieli inni.
W świecie java wszystkie funkcje muszą być zadeklarowane w klasie, bez względu na wszystko. Witaj w OO world =)
Tak, możesz tworzyć funkcje statyczne, er, metody, ale musisz do nich wykonywać kodowane połączenia. Aby wybrać wywołanie zwrotne w czasie wykonywania, musisz utworzyć interfejs (nie wskaźnik funkcji, typ proceduralny lub delegować), a następnie zrobić fałszywą klasę (choć być może anonimową), aby ją "zaimplementować". Ciesz się pracą!
Albo cieszyć się humorystyczny satirazation: http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html
zadajesz pytanie średnio raz na godzinę. Myślę, że mądrze byłoby zainwestować w niektóre książki lub możliwość google ... – Pod