Seite 1 von 1

openbook: javascript

Verfasst: Donnerstag 24. September 2009, 09:24
von jbs
Ich dachte ich schau mir mal javascript an und gelang dann zum openbook. Nun bin ich etwas verwirrt. Dass die Pythonversion Mängel enthält ist mir bekannt.

Im Kapitel 3.2.4 Umwandlung zwischen den Variablentypen laß ich dann das:

Code: Alles auswählen

var AnzahlHonigtoepfe = "5"
AnzahlHonigtoepfe *= 1  //Zeichenkette in Zahl
var wahrheitswert = true
wahrheitswert += ""  //Wahrheitswert in Zeichenkette
var Anzahl = 6
Anzahl += ""  //Zahl in Zeichenkette
Ist das üblich? Also mir grauts bei dem code...

Verfasst: Donnerstag 24. September 2009, 10:23
von Leonidas
Also in A re-introduction to JavaScript steht das Konvertieren von Zahlen in Strings durch hinzufügen eines leeren Strings auch beschrieben, das scheint noch halbwegs gangbar zu sein. Aber den Rest würde ich als "komisch" einstufen.

Ein Kumpel von mir hat das Buch gestern durchgeblättert und mehr oder minder auch niedergemacht. Kein Wunder.

Verfasst: Donnerstag 24. September 2009, 12:24
von sma
Mir reicht ja schon 3.1.1. "JavaScript-Schlüsselworte ... wie etwa alert...". Also erstens sind das IMHO Schlüsselwörter und nicht -worte und zweitens ist das faktisch falsch. Natürlich kann ich eine Variable "alert" nennen. Ist ist nur nicht sinnvoll, dadurch die vordefinierte Funktion aus "window.alert" zu überschreiben.

Die Tipps zum Umwandeln von Typen (und das sind DATENtypen, keine VARIABLENtypen) sind zwar trickreich, aber wenn man nicht gerade jedes Byte in der JavasScript-Datei sparen muss, würde ich doch vorschlagen, `String(x)`, `Boolean(x)` bzw. `Number(x)` zu benutzen. Siehe 15.5.1, 15.6.1 bzw. 15.7.1 des ECMAScript-3-Standards. Man darf auch gerne nutzen, dass JavaScript im Gegensatz zu Java alle Objekte gleichförmig wie Objekte behandelt, und daher für alles ein `toString` existiert. Außerdem gibt es noch `parseInt` (15.1.2.2) und `parseFloat` (15.1.2.3) als globale Funktionen.

Stefan

Verfasst: Donnerstag 24. September 2009, 12:59
von crs
also StringToNumber durch multiplikation mit 1 ist schon etwas komisch, ob das ueblich ist weiss ich aber nicht. koennte evtl. daran liegen, dass parseInt sich manchmal etwas anders verhaelt als man es vlt. erwarten wuerde:

Code: Alles auswählen

js> 1 * "08"
8
js> parseInt("08")
NaN
js> parseInt("08", 10)
8

js> 1 * "42 foo"
NaN
js> parseInt("42 foo")
42
bei Number(x) etc. ist das aber nicht der fall.

ein interessanter abschnitt bei den meisten javascript buechern ist auf jeden fall immer der in dem das paradigma (bzw. die paradigmen) der sprache erklaert wird. scheint bei dem buch nur abschnitt 4.4. zu sein? (zumindest habe ich sonst nichts gefunden).

javascript dort als "objektbasierte sprache" zu bezeichnen ist auf jeden fall schon stark vereinfacht und das js (aehnlich wie python) auch funktional ist scheint irgendwie nicht so deutlich zu werden, auch wenn in dem vorhergehenden abschnitt zumindest erklaert wird wie man funktionen definiert. und:
OpenBook hat geschrieben:[...],aber für das Verständnis von JavaScript ist nur ein gewisser Überblick über das Konzept der Objektorientierung in JavaScript nötig.
imho ist fuer das verstaendnis der sprache javascript das verstehen der prototyp-basierten objektorientierung einer der wichtigsten punkte, auch weil dies sonst nur von eher nicht so bekannten sprachen verwendet wird.

bei dem beispiel zu `eval` in abschnitt 4.2.1 fragt man sich vlt. auch warum man da nicht eher die "dictionary" eigenschaft der js objekte nutzt und zumindest darauf hinweist das man bei `eval` aufpassen sollte...

aber naja,
http://javascript.crockford.com/javascript.html hat geschrieben: Bad Books

Nearly all of the books about JavaScript are quite awful. They contain errors, poor examples, and promote bad practices. Important features of the language are often explained poorly, or left out entirely. I have reviewed dozens of JavaScript books, and I can only recommend one: JavaScript: The Definitive Guide (5th Edition) by David Flanagan. (Attention authors: If you have written a good one, please send me a review copy.)
das in dem quote genannte buch habe ich zwar nicht gelesen, aber "Javascript: The Good Parts" von Douglas Crockford kann ich auf jeden fall empfehlen (vorausgesetzt man kennt schon die eine oder andere sprache).

Verfasst: Donnerstag 24. September 2009, 13:06
von mkesper
crs hat geschrieben:also StringToNumber durch multiplikation mit 1 ist schon etwas komisch, ob das ueblich ist weiss ich aber nicht.
In Excel ist das üblich. ;)

Verfasst: Donnerstag 24. September 2009, 13:40
von DasIch
crs hat geschrieben:javascript dort als "objektbasierte sprache" zu bezeichnen ist auf jeden fall schon stark vereinfacht[...]
Es ist nicht falsch wobei es eine auf Prototypen basierte Sprache ist, was letztendlich auch Objekte sind aber dass sollte man nicht mit OOP verwechseln.

Python bezeichnet man letztendlich auch erstmal als Objekt orientiert.

Verfasst: Donnerstag 24. September 2009, 13:42
von BlackVivi
Welche freien Werke würdet ihr denn für Javascript empfehlen?

Verfasst: Donnerstag 24. September 2009, 13:51
von DasIch
BlackVivi hat geschrieben:Welche freien Werke würdet ihr denn für Javascript empfehlen?
Lies Code von Programmieren von denen du weisst dass sie gut sind. Javascript ist jetzt nicht so kompliziert als dass man es sich nicht erschliessen könnte. Letztendlich ist Javascript auch nur Scheme mit Prototypen, anderer Syntax und einem ganzen Haufen von Dingen die man besser weg gelassen hätte und auf die man beim Programmieren besser verzichtet.

Verfasst: Donnerstag 24. September 2009, 14:54
von crs
DasIch hat geschrieben:
crs hat geschrieben:javascript dort als "objektbasierte sprache" zu bezeichnen ist auf jeden fall schon stark vereinfacht[...]
Es ist nicht falsch wobei es eine auf Prototypen basierte Sprache ist, was letztendlich auch Objekte sind aber dass sollte man nicht mit OOP verwechseln.

Python bezeichnet man letztendlich auch erstmal als Objekt orientiert.
es ist nicht falsch (ich habe auch nicht geschrieben das es falsch ist) aber es hilft eben imho auch nicht so wirklich weiter. die von js verwendete prototyp-basierte programmierung wird naemlich generell schon der OOP zugeordnet, nur unterscheidet es sich eben von der (allerdings viel bekannteren) klassenbasierten OOP.
und gerade weil die klassenbasierte OOP mittlerweile doch relativ bekannt ist, sollte man in dem punkt imho auch auf die unterschiede einzugehen bzw. das prototyp system von js genauer zu erklaeren, denn jemand der OOP aus sprachen wie java oder python kennt, wird vermutlich den abschnitt lesen und denken "ok, das ist ja ungefaehr so wie in java/python".
(wenn ich das richtig sehe ist die Auflage des verlinkten OpenBooks allerdings auch von 2001).

@BlackVivi
ein freies buch kenne ich nicht. hier ist eine ganz gute, kurze uebersicht ueber die sprache zu finden und auf der uebersichtsseite sind auch noch einige weitere gute artikel verlinkt. im blog von John Resig sind auch einige gute artikel zu js allgemein.

generell ist javascript aber wirklich nicht soo kompliziert, und code von programmierern die gut sind zu lesen ist natuerlich sowieso immer gut ;)
man muss bei js allerdings schon etwas aufpassen, denn die sprache bringt durchaus ein paar 'fallen' mit sich, wie z.B.

Code: Alles auswählen

js> 0 == '0'
true
js> 0 === '0'
false

Verfasst: Donnerstag 24. September 2009, 21:18
von sma
BlackVivi hat geschrieben:Welche freien Werke würdet ihr denn für Javascript empfehlen?
Siehe auch http://www.python-forum.de/post-147414.html#147414, mal beim YUI theater vorbeischauen, die zitierten Artikel von Mozilla, das Buch von Crockford, diese Slideshow: http://www.slideshare.net/simon/a-reint ... javascript

"Objektbasiert" ist übrigens kein so falscher Begriff, wird er doch manchmal benutzt, um Objektorientierung ohne Klassen zu beschreiben - quasi als halbe Objektorientierung. Das ist aber IMHO quatsch, denn Klassen sind kein essentieller Bestandteil. Objekte und Nachrichten sind es. Und die hat JavaScript (also Mischung aus Scheme und Self) durch das Self-Erbe.

Ein "das ist wie" ist in der Regel immer der falsche Weg, eine Sprache zu lernen. Um Yoda zu zitieren: "You must unlearn what you have learned."

Stefan

Verfasst: Donnerstag 24. September 2009, 22:02
von BlackJack
@sma: Bist Du sicher, dass Du das Yoda-Zitat korrekt wiedergegeben hast? Das sieht mir grammatikalisch irgendwie zu richtig aus. :-D

Verfasst: Donnerstag 24. September 2009, 22:06
von Hyperion
BlackJack hat geschrieben:@sma: Bist Du sicher, dass Du das Yoda-Zitat korrekt wiedergegeben hast? Das sieht mir grammatikalisch irgendwie zu richtig aus. :-D
*g* ich habe leider Star Wars nie mit Original Sound gesehen...

Aber ich könnte aus Episode IV kontern:
Yoda hat geschrieben: "Erinnere Dich an das, was Du gelernt, denn retten kannst Dich!"
;-)

Verfasst: Donnerstag 24. September 2009, 22:09
von sma
BlackJack hat geschrieben:@sma: Bist Du sicher, dass Du das Yoda-Zitat korrekt wiedergegeben hast? Das sieht mir grammatikalisch irgendwie zu richtig aus. :-D
Gegoogelt habe ich extra, um es richtig wiederzugeben.

Das andere Zitat müsste sein: "Mind what you have learned. Save you it can."

Und natürlich gilt immer: "Much to learn, you still have."

Stefan

Verfasst: Donnerstag 24. September 2009, 22:22
von Panke
sma hat geschrieben: "Objektbasiert" ist übrigens kein so falscher Begriff, wird er doch manchmal benutzt, um Objektorientierung ohne Klassen zu beschreiben - quasi als halbe Objektorientierung.
Ich kenne den Begriff objektbasiert als Bezeichnung eines Programmierstils, der zwar Klassen und Objekte nutzt, aber von Vererbung und Polymorphie noch nichts gehört hat. Quasi C mit besseren Structs. Lippmann und Lajoie nutzen den Begriff in "C++", ich glaube das Buch gibts auch als C++ Primer.

Verfasst: Donnerstag 24. September 2009, 22:36
von Hyperion
Hat hier jemand eigentlich einen guten Tipp für eine gute JavaScript-Shell? Also evtl. nen Addon für den Firefox o.ä.? Am besten so was wie "IJavaScript" ;-)

Verfasst: Donnerstag 24. September 2009, 22:49
von sma
Panke hat geschrieben:Ich kenne den Begriff objektbasiert als Bezeichnung eines Programmierstils, der zwar Klassen und Objekte nutzt, aber von Vererbung und Polymorphie noch nichts gehört hat.
Wikipedia sagt "Existieren in der erwählten Programmiersprache keine Klassen oder werden diese explizit unterdrückt, so spricht man zur Unterscheidung oft auch von objektbasierter Programmierung." und stimmt damit zwar mir zu, aber jetzt wo du's sagst, meine ich mich zu erinnern, dass nicht die Abwesenheit von Klassen sondern die von Vererbung wichtig war. Polymorphie hat damit aber AFAIK nichts zu tun, denn diese ist gerade auch bei einem einfachen ad-hoc-Modell mit C vorhanden, indem man zwei Funktionen mit gleichen Namen in zwei Strukturen ablegt.

Letztlich aber egal, weil ich in allen Fällen von OOP sprechen würde und Crockfords Unterscheidung mit classical und prototypical benutzen würde, wobei im Deutschen bei klassenbasiert und prototypbasiert leider der Wortwitz, dass klassenbasiert gleichzeitig auch klassisch ist und in prototypical das "typisch" steckt, verloren geht.

Auf der OOPSLA 1986 gab es mindestens drei Paper zum Thema prototyp-basierter Objektorientierung. Und das ich keine früheren Paper gefunden habe liegt wahrscheinlich einfach daran, dass das die erste OOP-Konferenz war. Leider alles zu früh für kostenlose PDFs, doch Lieberman hat sein Paper veröffentlicht.

Stefan

Verfasst: Freitag 25. September 2009, 12:17
von Leonidas
Hyperion hat geschrieben:Hat hier jemand eigentlich einen guten Tipp für eine gute JavaScript-Shell? Also evtl. nen Addon für den Firefox o.ä.? Am besten so was wie "IJavaScript" ;-)
Eventuell Gjs oder Seed, aber die sind natürlich keine Firefox-Addons (wobei Gjs die gleiche JS-Engine nutzt).

Verfasst: Samstag 26. September 2009, 09:30
von sma
Hyperion hat geschrieben:Hat hier jemand eigentlich einen guten Tipp für eine gute JavaScript-Shell? Also evtl. nen Addon für den Firefox o.ä.? Am besten so was wie "IJavaScript" ;-)
Was hat JavaScript mit Firefox zu tun? Kompiliert man sich V8 selbst, ist da eine einfache Konsole dabei. Gleiches gilt für Spidermonkey. Es gibt auch pyv8, dann kann man JavaScript als eingebettete Scriptsprache für Python benutzen. Für Ruby gibt es Johnson, das ist noch ein bisschen cooler. Auch Java 6 kommt mit eingebautem JavaScript (Rhino in diesem Fall).

Stefan

Verfasst: Samstag 26. September 2009, 10:30
von BlackJack
@sma: Die meisten werden JavaScript für Webseiten verwenden und da ist eine Shell zum herumprobieren im Browser nützlicher als Standalone.

Verfasst: Samstag 26. September 2009, 14:44
von sma
Genau diesen Punkt wollte ich absichtlich ignorieren. JavaScript sollte man getrennt von einem Browser sehen, um die Sprache zu sehen und zu verstehen.

Stefan