Java Einstieg.. wie geht das?

Man kann C genauso highlevel schreiben, nur muß dann mehr auf Initialisierungsfunktionen und Datenstrukturen, die selber geschrieben werden zurückgegriffen werden ...
 
Original von menace
Man kann C genauso highlevel schreiben, nur muß dann mehr auf Initialisierungsfunktionen und Datenstrukturen, die selber geschrieben werden zurückgegriffen werden ...

naja, manche sachen sind in c nicht so einfach herbeiprogrammiert. wie wuerdest du zum beispiel currying in c machen?

Code:
Python 2.4.2 (#1, Feb  4 2006, 02:23:36) 
[GCC 4.0.0 20041026 (Apple Computer, Inc. build 4061)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def add_and_print_maker(x):
...     def temp(y):
...             print "%d + %d = %d" % (x, y, x+y)
...     return temp
... 
>>> spam = [1, 2, 3, 4, 5]
>>> eggs = map(add_and_print_maker, spam)
>>> for i in eggs: i(23)
... 
1 + 23 = 24
2 + 23 = 25
3 + 23 = 26
4 + 23 = 27
5 + 23 = 28
>>>

der code definiert eine funktion die als rueckgabewert eine funktion temp liefert. die zurueckgegebene funktion temp nimmt ein argument und addiert dieses zu dem argument was an add_and_print_maker() uebergeben wurde, als temp erzeugt wurde.
mit der eingebauten funktion map() wird eine liste durchlaufen und die funktion add_and_print_maker() fuer jedes element aufgerufen. das ergebnis ist eine liste von funktionen namens eggs. die liste eggs wird danach in einer for schleife durchlaufen und jede enthaltene funktion wird mit dem argument 23 aufgerufen.
 
@The Dude:
Nichts gegen dich und Python, ich habe selbst schon in Python programmiert und fands auch recht gut, aber ich denke nicht daß Python für Einsteiger so gut ist. Allein schon wenn ein Einsteiger irgendwie Hilfe braucht tut er sich erheblich schwerer Support zu bekommen, auch hier im Board, als bei C/C++ oder Java, weil es nunmal nicht so verbreitet ist. Ich denke auch daß es erheblich weniger Tuts für Python gibt im Gegensatz zu den bekannteren Programmiersprachen. Auch hat Python, wie alle Skriptsprachen, den erheblichen Nachteil daß Syntaxfehle,r die gerade bei Ungeübten zu Hauf auftreten, erst entdeckt werden wenn man an die fehlerhafte Codestelle im Programm kommt, was ja je nach Umfang des Programms einige Zeit dauern kann, und dann umso mehr Nerven kostet. Bei anderen schmeißt man den Compiler an und weiß sofort wo der Syntaxfehler steckt.

odigo
 
Das lässt sich auch in C++ umsetzen, fast 1 zu 1.
Lediglich dieses schön einfache durchlaufen von Arrays mit einem enizelnen Befehl oder for-Schleifen dieser Art muss man sich selber zusammenbasteln.
Auch C++ kennt Funktionspointer.
 
Original von sheepd
Auch C++ kennt Funktionspointer.

funktionspointer gibts auch in c, da brauchts kein c++ fuer. aber ob das damit so einfach zu loesen ist... es geht darum eine funktion zurueck zu liefern die zur laufzeit des programms erzeugt wurde.
genau das gleiche ist es nicht ob man funktionszeiger hat oder ob es einen eigenen typ funktion in der sprache gibt so wie es einen typ int gibt.

@odigo: stimmt schon, dass der compiler ein erster test auf korrektheit ist. syntaxfehler werden aber auch in python sofort bemerkt wenn man das programm ausfuehrt. andere fehler dagegen nicht. manche compilermeldungen sind allerdings auch nicht gerade einfach zu interpretieren. c++ code der templates aus der stl verwendet kann schon sehr ueble fehlermeldungen verursachen.
wenn man "ordentlich" programmieren lernen will, dann ist es wahrscheinlich sinnvoll mit einer statisch typisierten sprache anzufangen. ich hatte beim threadstarter eher den eindruck, dass er schnell zu ergebnissen kommen will.
 
ieeek. Bleib mir mit funktionalen Paradigmen weg :P

Ich verstehe nicht so ganz, wozu ich Currying brauchen soll, wenn ich normal programmiere. Das ist imo schnickschnack, der von Leuten im Elfenbein-programmiersprachenturm ersonnen wird. Das war mir schon damals mit Ocaml ein Verdruß...
 
Original von menace
ieeek. Bleib mir mit funktionalen Paradigmen weg :P

hehe, war klar, dass sowas kommt. :)
natuerlich braucht man den ganzen kram nicht. man braucht auch keine funktionen. diese ganzen konzepte zur abstraktion bringen gar nichts, deshalb wird heutzutage auch praktisch nur in assembler programmiert.
 
natuerlich braucht man den ganzen kram nicht. man braucht auch keine funktionen. diese ganzen konzepte zur abstraktion bringen gar nichts, deshalb wird heutzutage auch praktisch nur in assembler programmiert.

Oi, ja, Pauschalisierung und Generalisierung sind toll.
Es sagt mal ein weiser Informatiker:
"Man kann für jedes Problem einen Layer hinzufügen, nur generiert das ein neues Problem"

Darf ich hier auf das Thema GarbageCollection in Java verweisen? Oder auf die Komplexität in C++ durch Mehrfachvererbung. Aber jeder soll das benutzen, was er will. Und die Idee, dass man durch Programmiersprachen Komplexität vermindern kann, ist doch nun langsam wirklcih überholt. Warum sonst ist das funktionale Paradigma für viele so ungewohnt und eckig?
 
Original von menace
natuerlich braucht man den ganzen kram nicht. man braucht auch keine funktionen. diese ganzen konzepte zur abstraktion bringen gar nichts, deshalb wird heutzutage auch praktisch nur in assembler programmiert.

Oi, ja, Pauschalisierung und Generalisierung sind toll.

ich wollte eigentlich keine richtige diskussion anfangen, deshalb die etwas polemische antwort. wird doch sonst ganz schoen ot und ausserdem bin ich selbst kein fanboy von irgend einer bestimmten programmiersprache. ich bin nur neugierig auf verschiedene arten programmiersprachen zu bauen.

Darf ich hier auf das Thema GarbageCollection in Java verweisen?

hm, garbage collection im allgemeinen hat sich in letzter zeit ganz schoen weiter entwickelt. da wurde viel geforscht und auch ergebnisse erzielt. malloc() kann uebrigens bei unbedachter benutzung aehnliche laufzeiteigenschaften haben wie garbage collection. aber es ist eben nur eine moegliche loesung fuer ein problem und wenn man konkrete anforderungen hat dann muss man immer ueberlegen welche eigenschaften die loesung haben muss.

Oder auf die Komplexität in C++ durch Mehrfachvererbung.

ich bin auch eher ein freund von kompakten sprachen. deshalb mag ich c auch lieber als c++. man kann die sprache mehr oder weniger komplett im kopf haben. das gleich gilt auch fuer python, btw. der schoepfer von python hat in seinem blog vor einiger zeit uebrigens laut darueber nachgedacht, konstrukte die man von funktionalen sprachen kennt (reduce, filter, map) wieder rauszuschmeissen. mit der begruendung, dass es andere methoden gibt das gleich zu erreichen (list comprehensions). redundanz zu vermeiden ist eines der haupt designkriterien in python. das hinzufuegen neuer syntax wird nur sehr selten gemacht.

Warum sonst ist das funktionale Paradigma für viele so ungewohnt und eckig?

vermutlich, weil es ueblich ist programmieren mit einer nicht-funktionalen sprache zu lernen. ich kann mir vorstellen, dass leute die als erstes scheme oder haskell gelernt haben anders darueber denken. z.b. hab ich letztens an der uni utrecht mit jemandem darueber geredet. in utrecht wird den bachelorstudenten neben java auch haskell gelehrt. viele moegen das nicht und machen nur das allernoetigste an kursen mit haskell. aber bei manchen ist die uebereinstimmung zwischen der art zu denken und der art in funktionalen sprachen zu programmieren groesser als bei anderen sprachen. der meinte jedenfalls, wenn er java code z.b. sieht dann ist da viel zu viel rauschen im signal und er hat muehe die wesentlichen teile vom housekeeping zu trennen. fuer die meisten leute (mich eingeschlossen) ist das andersrum. da is der funktionale code zu "dicht" und man muss an ein paar zeilen ewig knabbern bis man die bedeutung raus hat.
aber wenn mans nicht ausprobiert dann findet man nicht raus welche sprache am ehesten dem eigenen denken entspricht und somit am effektivesten ist.

einigen wir uns auf das was Dawen gesagt hat; verschiedene programmiersprachen erfuellen verschiedene aufgaben unterschiedlich gut.

funktionale sprachen die keine seiteneffekte haben eignen sich z.b. sehr gut fuer parallele ausfuehrung. und das ist durchaus in der "echten welt" interessant. z.b. wenn man einen cell prozessor effektiv nutzen will oder fuer massiv verteilte anwendungen wie google.
einen linux treiber in haskell zu schreiben macht dagegen vermutlich recht wenig sinn. dafuer gibts eben den portablen assembler (aka c). ;)
 
Zurück
Oben