non js-master: Beispiel-Code verstehe ich nicht

Guten Morgen,

ich versuche eine in JS geschriebene DB zu benutzen und stoße auf ein paar Verständnisprobleme.

Da der Code momentan kein ALTER oder ADD oder INSERT anbietet, wollte ich den bestehenden Code erweitern, verstehe aber die Syntax nicht.

Kann mir da jemand auf die Sprünge helfen?

Hier gäbe es den Code http://trimpath.com/project/wiki/TrimQuery

und hier gäbe es meine Fragen:

1. Wieso können die mit einer '(' anfangen. Braucht man nicht immer eine Funktion dazu? Was ist der Vorteil ihrer Schreibweise?
Braucht man bei 'function' nicht auch immer einen Namen? (Die machen das die ganze Zeit)

[Code]-------

var TrimPath;
   (function() {

-------------

2. Wie funktioniert der folgende Funktionsaufruf? Welche Bedeutung hat der ':'? Auch hier hat die Funktion keinen Namen?

[Code]-------
   from    : function(tables) { this.tables = checkArgs(tables, 1, null, "FROM",   NodeType.tableDef); },

-------------

Ein paar Zeilen weiter gibt es dann das:

[Code]-------
   FROM  : function() { return new NodeType.from(arguments); },
   -------------

Wie stehen die Zeilen in Zusammenhang?

3. und letzte Frage.
Bietet es sich an deren Code um meine gewünschte SQL-Befehle zu erweitern oder sollte ich eine eigenen 'dbms.js'-Datei schreiben, die sozusagen das Ändern der Tabellen übernimmt und ich nehme nur deren Code zum Auslesen der Daten?

Für alle Tipps und Antworten und Ratschläge wäre ich dankbar.

(Das ganze soll eine DB-Simulation für Schüler werden.)

  1. Hi,

    Da der Code momentan kein ALTER oder ADD oder INSERT anbietet, wollte ich den bestehenden Code erweitern, verstehe aber die Syntax nicht.

    viel Spaß. ALTER wird lustig.

    1. Wieso können die mit einer '(' anfangen.

    Wieso nicht?

    Braucht man nicht immer eine Funktion dazu?

    Nö.

    Was ist der Vorteil ihrer Schreibweise?

    Der Vorteil ist, dass man mehr als ein Sprachelement gruppiert hat und entsprechend nutzen kann. Schaue in die letzte Zeile des Codes, wo die Klammer wieder geschlossen wird.

    Braucht man bei 'function' nicht auch immer einen Namen?

    Nö. Wie Du siehst. Ohne Namen ist es einfach eine anonyme Funktion.

    1. Wie funktioniert der folgende Funktionsaufruf? Welche Bedeutung hat der ':'? Auch hier hat die Funktion keinen Namen?

    Eingeleitet durch geschweifte Klammern wird ein Objekt erzeugt. Der Doppelpunkt trennt Eigenschaftsname und -wert. Wenn es Dir hilft, stelle Dir vor, es sei ein assoziatives Array.

    from    : function(tables) { this.tables = checkArgs(tables, 1, null, "FROM",   NodeType.tableDef); },
    Ein paar Zeilen weiter gibt es dann das:
       FROM  : function() { return new NodeType.from(arguments); },
    Wie stehen die Zeilen in Zusammenhang?

    In keinem. Wenn man will, kann man allerdings einen herstellen.

    Bietet es sich an deren Code um meine gewünschte SQL-Befehle zu erweitern

    Klar, warum nicht? Das passt sicher auch am besten ins Projekt, in das Du Deine Erweiterungen ja zurückfließen lässt.

    oder sollte ich eine eigenen 'dbms.js'-Datei schreiben, die sozusagen das Ändern der Tabellen übernimmt und ich nehme nur deren Code zum Auslesen der Daten?

    Dann würde sich schon die Einbindung des Projektes ändern, was nur selten empfehlenswert ist.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. viel Spaß. ALTER wird lustig.

      Das mag schon sein. Aber ist das nicht eine grundlegende Funktion. Fändest du es geschickter bzw. einfacher umzusetzen, wenn bei einer Änderung die Tabelle neu erzeugt wird. Also der Ablauf

      Holen der Daten -> Ändern durch den Anwendern -> Vollständiges Speichern der neuen Tabelle.

      Die Tabellen werden ja bei meiner Anwendung nicht groß, daher sollte das aich nicht so aufwendig sein.

      Wieso nicht?

      Braucht man nicht immer eine Funktion dazu?
      Nö.

      Sorry, aber irgendwie reicht mir das nicht zum verstehen. Kennst du eine Quelle in der eine solche Programmierung erklärt wird. Oder ein passendes Stichwort damit ich über Google suchen kann?

      Ansonsten schon mal Danke für den Ratschlag mit der Projektgestaltung.

      1. Hi,

        viel Spaß. ALTER wird lustig.
        Das mag schon sein. Aber ist das nicht eine grundlegende Funktion.

        nein, eigentlich nicht, da die Daten ja nicht persistent gespeichert werden. Die Tabelleninhalte lieferst Du als JavaScript-Code mit.

        Holen der Daten -> Ändern durch den Anwendern -> Vollständiges Speichern der neuen Tabelle.

        Die ersten beiden Punkte sind möglich, der letzte nicht.

        Braucht man nicht immer eine Funktion dazu?
        Nö.
        Sorry, aber irgendwie reicht mir das nicht zum verstehen. Kennst du eine Quelle in der eine solche Programmierung erklärt wird. Oder ein passendes Stichwort damit ich über Google suchen kann?

        Eine Quelle, in der erklärt wird, dass Klammern nicht die Funktion haben, die Du in ihnen vermutest? Ich fürchte, sowas gibt es nicht. Allerhöchstens kann es eine Quelle geben, die erklärt, welche Funktion Klammern _haben_. Der Einfachheit halber:

        Du unterstellst eine Beschränkung, die es nicht gibt. Eine function() ist in JavaScript absolut nichts Magisches - was _in_ einer solchen geht, geht auch außerhalb, und umgekehrt. Klammern klammern etwas ein, mehr nicht. Wieso sollte das nur an bestimmten Stellen gehen?

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. nein, eigentlich nicht, da die Daten ja nicht persistent gespeichert werden. Die Tabelleninhalte lieferst Du als JavaScript-Code mit.

          So direkt nicht. Es wird eine neue Tabelle per JavaScript erzeugt und mit Daten durch den Anwender gefüllt. Dafür gibt es die Funktion insert.

          Holen der Daten -> Ändern durch den Anwendern -> Vollständiges Speichern der neuen Tabelle.

          Die ersten beiden Punkte sind möglich, der letzte nicht.

          Nicht wirklich, aber fast. Ich helfe mir da immer so, dass ich einen JavaScript-Code erzeugen lassen und in einer Testarea anzeigen lasse. Den muss man dann kopieren und mit Hilfe eines Textverarbeitungsprogramms als js-Datei speichern. Diese lässt sich später dann importieren. Dadurch kann ich fertige Datensätze in einer externen Datei speichern und alle Schüler können sich in SQL üben. Das ist eigentlich der einzige Zweck der ganzen Geschichte.

          Du unterstellst eine Beschränkung, die es nicht gibt. Eine function() ist in JavaScript absolut nichts Magisches - was _in_ einer solchen geht, geht auch außerhalb, und umgekehrt. Klammern klammern etwas ein, mehr nicht. Wieso sollte das nur an bestimmten Stellen gehen?

          Deswegen ja auch non js-master ;-) Aber es stimmt schon. Wahrscheinlich muss ich eher an meinem Denken arbeiten als am Code.

          Dank dennoch.

          1. Hi,

            nein, eigentlich nicht, da die Daten ja nicht persistent gespeichert werden. Die Tabelleninhalte lieferst Du als JavaScript-Code mit.
            So direkt nicht. Es wird eine neue Tabelle per JavaScript erzeugt und mit Daten durch den Anwender gefüllt. Dafür gibt es die Funktion insert.

            richtig. Aber:

            Nicht wirklich, aber fast. Ich helfe mir da immer so, dass ich einen JavaScript-Code erzeugen lassen und in einer Testarea anzeigen lasse. Den muss man dann kopieren und mit Hilfe eines Textverarbeitungsprogramms als js-Datei speichern. Diese lässt sich später dann importieren.

            Hier werden also die Tabelleninhalte als JavaScript-Code mitgeliefert ;-) Wobei ich es für nicht ganz sorgenfrei halte, eine JavaScript-Datei von der lokalen Festplatte hinzu laden zu wollen, aber sei's drum. Du solltest auf jeden Fall davon absehen, eine Text_verarbeitung_ zu empfehlen, denn die erzeugt alles Mögliche, nur keine JavaScript-Datei.

            Du unterstellst eine Beschränkung, die es nicht gibt. Eine function() ist in JavaScript absolut nichts Magisches - was _in_ einer solchen geht, geht auch außerhalb, und umgekehrt. Klammern klammern etwas ein, mehr nicht. Wieso sollte das nur an bestimmten Stellen gehen?
            Deswegen ja auch non js-master ;-) Aber es stimmt schon. Wahrscheinlich muss ich eher an meinem Denken arbeiten als am Code.

            Ja, das ist das Wichtigste überhaupt: Verstehen. Wie zum Beispiel, dass es zwischen "ich sehe es meistens so" und "auf diese Weise funktioniert die Technik" himmelweite Unterschiede gibt - was Du soeben bemerkst. Erstaunlicherweise spielt hierbei die Psychologie eine nicht unbedeutende Rolle: Entwickler sind faul. Warum also sollten sie komplizierte Ausnahmeregelungen festlegen und implementieren, wenn ein Symbol (wie z.B. eine Klammer) auch ganz einfach überall die selbe Bedeutung haben kann? Das Ergebnis dieser Faulheit hat sich bewährt: Meistens ergibt sich daraus ein in sich logisches, einheitliches Gebilde, für dessen Verständnis man lediglich eine gewisse Abstraktion (lies: Distanz) erreichen muss.

            Und mit Abstraktion sollten Entwickler keine Probleme haben. Man muss sie nur ein bisschen üben.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
      2. Hallo,

        Kennst du eine Quelle in der eine solche Programmierung erklärt wird.

        Ja, das ist ein Problem. JavaScript wurde ursprünglich mal von Netscape entwickelt. Es wird als ECMA-Script weiterentwickelt. Hierfür gibt es http://www.ecma-international.org/publications/standards/Ecma-262.htm leider nur als PDF.

        Das JavaScript bis Version 1.5 wird im "Core JavaScript Guide" beschrieben. Die derzeit wohl beste Veröffentlichung hiervon ist http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide.

        Wenn es dann um DOM geht, brauchst Du noch http://www.w3.org/DOM/DOMTR.

        viele Grüße

        Axel

    1. Wie funktioniert der folgende Funktionsaufruf? Welche Bedeutung hat der ':'? Auch hier hat die Funktion keinen Namen?

    Dir ist offensichtlich die literale Schreibweise (heißt das wirklich so?) fremd und du kennst keine Objekte.

    Du kannst Objekte mit {} definieren (und Arrays mit [] ).

    var obj = {};

    entspricht:

    var obj = new Object();

    Der Sinn ist, dass du diesen Variabeln Attribute geben kannst (und einen eigenen Namespace definieren kannst, damit vermeidest du Namenskonflikte). Ein solches Objekt ist z.b. window, oder window.document (aber auch ein Array ist ein Object), in der kurzschreibweise sieht das so aus:

    var obj = {
    attribut: 'test'
    };

    alert(obj.attribut);

    entspricht:
    var obj = new Object();
    obj.attribut = 'test';

    Der Vorteil, du kannst mehrere Attribute auf einmal zuweisen:

    var obj = {
    attribut_1: 'test 1',
    attribut_2: 'test 2',
    ...
    };

    Du kannst den Attributen aber auch Funktionen zuweisen:

    var obj = {
    funktion: function(param) { alert('Hallo ' + param); };
    };

    obj.funktion('Welt');

    Das Konstrukt:

    (function() { .... } ) ()
    (in z.b. http://trimpath.com/project/attachment/wiki/TrimPathDownload/query.js?format=txt

    Ist eine anonyme (also Namenslose) Funktion, bzw. ein closure steht ja auch da:

    // Using a closure to keep global namespace clean.

    Sie rufen also eine anonyme Funktion zur Initialisierung auf, dadurch stehen alle temporären Variabeln und Funktionen im Kontext der Funktion, also bleibt window "sauber". Lediglich window.TrimPath wird um  die nötigen Eigenschaften und Funktionen erweitert.

    Struppi.