Aqua: Zwei Grundsatz-Fragen (zu lang fürs topic)

Hallo!

Frage 1:

Was ist richtig?

a) <div onmouseover="foo();">
b) <div onmouseover="foo()">

Frage 2:

<script type="text/javascript">
<!--
function apfel(foo)  { ... }
function banane(foo)  { ... }
function birne(foo) { ... }
-->
</script>

Die variable  foo wird hier 3  mal verwendet,
einmal in der function apfel,
dann in der function banane und dann in der function birne.

Die werte kommen durch den aufruf im onmouseout rein. (unwichtig)

Frage:  Sollte ich nicht für alle 3 funktionen "foo" nehmen
sondern besser andere variablen-namen?

Also so:

<script type="text/javascript">
<!--
function apfel(foo_1)  { ... }
function banane(foo_2)  { ... }
function birne(foo_3) { ... }
-->
</script>

Danke!
Aqua

  1. Hi!

    (Ist hier der Ideologe gefragt? - Dann bin ich vielleicht teilweise richtig. Allerdings argumentiert der Ideologe idealerweise mit den Erfahrungen des Praktikers.) Hmm, ich versuchs mal:

    Was ist richtig?

    a) <div onmouseover="foo();">
    b) <div onmouseover="foo()">

    Das ';' ist als Blocktrenner, also als Seperator von Anweisungsbloecken zu verstehen. Das gibt's in jeder Sprache, vermutlich (eigentlich ist's sicher). Manche Sprachen verwenden den Zeilenvorschub als Trenner, manche sogar den doppelten Zeilenvorschub. "Zivilisiert" ist es meines Erachtens Bloecke zu trennen, und zwar auch dann, wenn es die Syntax der Sprache nicht zwingend verlangt. Also ist a) besser. - Aehnliche Diskussionen kann man auch gut darueber fuehren, ob Bedingungen eingeklammert werden sollten oder ob 'GoTo' boese ist, oder ob ein verkapptes 'GoTo' boese ist.
    Man wird zwar irgendwie schlauer, aber nur relativ.   ;-)

    <script type="text/javascript">
    <!--
    function apfel(foo)  { ... }
    function banane(foo)  { ... }
    function birne(foo) { ... }
    -->
    </script>

    Die variable  foo wird hier 3  mal verwendet,
    einmal in der function apfel,
    dann in der function banane und dann in der function birne.

    Nun, Foo repraesentiert jeweils einen Verweis auf einen anderen Speicherbereich des Systems. Also gilt "Foo != Foo". Und so wie es der Mensch gewohnt ist ungleiche Sachverhalte mit ungleichen Namen zu versehen, so sollte er diese Gewohnheit auch dann beibehalten, wenn es um Abbildungen geht.

    (Ich plaediere zum Beispiel immer wieder fuer DB-eindeutige Namen von Datenfeldern ('ID' als DF-Namen in jeder Tabelle, pfui. Warum keine Praefices?). Nicht nur dadurch mache ich mich unbeliebt und sollte vermutlich eher heute als morgen den Job wechseln. - Aber leider will mich keiner mangels formalen Abschlusses. Ich arme Sau.)

    Gruss,
    Lude

    ---
    "Wer nicht kaempft, hat schon gewonnen."

    1. Hi,

      Was ist richtig?

      a) <div onmouseover="foo();">
      b) <div onmouseover="foo()">

      Das ';' ist als Blocktrenner, also als Seperator von Anweisungsbloecken zu verstehen.

      kleine Korrekur: ';' ist ein Anweisungstrenner, kein Blocktrenner. - Ich hoffe, dass weitere Korrekturen nicht erforderlich werden und die Argumentation nicht notleidend wird.   ;-)

      Gruss,
      Lude

    2. Hi Lude

      <script type="text/javascript">
      <!--
      function apfel(foo)  { ... }
      function banane(foo)  { ... }
      function birne(foo) { ... }
      -->
      </script>

      Nun, Foo repraesentiert jeweils einen Verweis auf einen anderen Speicherbereich des Systems. Also gilt "Foo != Foo".

      Ich hätte das jetzt eher so gesehen: Alle drei Parameter sind Foos, wenn auch unterschiedliche Foos, und sollen desshalb auch Foo heissen. Ich finde es wichtiger, dass ein Parametername aussagt was übergeben werden soll und nicht welchen Speicherbereich ich jetzt genau verwende. Das sollte mir ja von den Gültigkeitsbereichen her ohne weitere Angabe klar sein, IMHO. Was meinst du zu dieser Ansicht?

      (Ich plaediere zum Beispiel immer wieder fuer DB-eindeutige Namen von Datenfeldern ('ID' als DF-Namen in jeder Tabelle, pfui. Warum keine Praefices?). Nicht nur dadurch mache ich mich unbeliebt und sollte vermutlich eher heute als morgen den Job wechseln. - Aber leider will mich keiner mangels formalen Abschlusses. Ich arme Sau.)

      Ja, bei DB-Designs bin ich auch schon auf solche Probleme gestossen. Meiner Meinung nach spielt es eigentlich keine grosse Rolle, welche Strategie man bei der Namensvergebung verfolgt - hauptsache, sie lässt sich danach intuitiv verwenden, ohne dass ich immer nachschauen muss.

      MfG

      Tom2

      --
      SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
      ss:| zu:) ls:& fo:) de:] va:) ch:] sh:( n4:& rl:° br:> js:| ie:% fl:( mo:}
      1. Hi,

        [...] Was meinst du zu dieser Ansicht?

        hoert sich ganz gut an. Vielleicht hast Du Recht?

        Ja, bei DB-Designs bin ich auch schon auf solche Probleme gestossen. Meiner Meinung nach spielt es eigentlich keine grosse Rolle, welche Strategie man bei der Namensvergebung verfolgt - hauptsache, sie lässt sich danach intuitiv verwenden, ohne dass ich immer nachschauen muss.

        Das habe ich auch schon gehoert, bin mir aber sicher, dass die Aussagen in sich widerspruechlich sind. Gute Namen sind intuitiv verwendbar. Gute Namen werden unter Zuhilfenahme von guten Regeln erstellt. - Ich habe mich schon in vielen (zu wartenden) Projekten ueber pseudo-intuitive Namen geaergert und zwar sehr, denn da wird mir unnoetigst Zeit und Kraft weggefressen. - Typisch zum Beispiel auch das Mappen von Namen zwischen den einzelnen Schichten.   :-(

        Gruss,
        Lude

  2. Moin, moin!

    Zu Frage 1:

    Ein Beispiel ohne Semikolon findet sich bei http://selfhtml.teamone.de/javascript/intro.htm#javascript_htmltags. Diese Variante ist ok. Aber auf der Seite
    http://selfhtml.teamone.de/sprache/regeln.htm wird richtigerweise ausgeführt
    "Eine Anweisung in JavaScript besteht immer aus einem Befehl, der mit einem Strichpunkt ; oder einem Zeilenumbruch abgeschlossen wird. In neueren Netscape-Dokumentationen zu JavaScript wird der Strichpunkt am Ende von einfachen Anweisungen zwar häufig weggelassen, aber um unnötige Fehler zu vermeiden, ist es ratsam, sich von vorneherein anzugewöhnen, alle Anweisungen auf diese Weise abzuschließen."
    Gewöhne Dir also lieber die Nutzung des Semikolons an.

    Und beachte, daß zwischen Groß- und Kleinschreibung unterschieden wird! Es muß also onMouseover heißen. Vergleiche http://selfhtml.teamone.de/javascript/sprache/regeln.htm#namen und
    http://selfhtml.teamone.de/javascript/objekte/htmlelemente.htm#allgemeines:
    "Beachten Sie unbedingt die Groß-Kleinschreibung der Eigenschaften und Methoden, die in diesem Abschnitt zu den einzelnen HTML-Elementobjekten aufgelistet sind. Fehler bei der Groß-Kleinschreibung führen zu Fehlern in JavaScript."

    Zu Frage 2:

    http://selfhtml.teamone.de/javascript/sprache/variablen.htm#definieren lehrt einen:
    "Parameter, die einer Funktion übergegeben werden, werden ebenfalls als lokale Variablen behandelt."
    Du kannst Dir also Deine Variablen-Benennung selbst wählen. Wiederverwendbarer Code entsteht durch die Verwendung gleicher Bezeichnungen, Verwechslungen werden durch unterschiedliche Namen vermieden. Sicherlich gibt es diverse weitere Argumente.

    Alles klar?

    Norbert

    1. Hallo,

      Und beachte, daß zwischen Groß- und Kleinschreibung unterschieden wird!

      Ja, unbedingt.

      Es muß also onMouseover heißen.

      Nein, eben nicht. Es _muss_ onmouseover heißen. Nur in case-insensitiven Kontexten (z.B. bei HTML Attributnamen), kann es onMouseOver oder onMouseover oder ONMOUSEOVER oder oNmOuSeOvEr heißen.

      http://www.w3.org/TR/html4/interact/scripts.html#adef-onmouseover

      http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.2
      ...
      Attribute names are always case-insensitive.
      ...

      viele Grüße

      Axel

      1. Moin, moin!

        Sind dann alle Beispiele in SELFHTML wie bei http://selfhtml.teamone.de/javascript/sprache/eventhandler.htm#onmouseover, http://selfhtml.teamone.de/javascript/objekte/htmlelemente.htm#center... falsch?

        Norbert

        1. Hi,

          Sind dann alle Beispiele in SELFHTML wie bei http://selfhtml.teamone.de/javascript/sprache/eventhandler.htm#onmouseover, http://selfhtml.teamone.de/javascript/objekte/htmlelemente.htm#center... falsch?

          einen bekannten Forumsteilnehmer nachahmend diesmal: "Ja, die Frage ist nur wie falsch. Kaufe immer direkt beim Hersteller."   ;-)

          Gruss,
          Lude

        2. Hallo,

          Sind dann alle Beispiele in SELFHTML wie bei http://selfhtml.teamone.de/javascript/sprache/eventhandler.htm#onmouseover, http://selfhtml.teamone.de/javascript/objekte/htmlelemente.htm#center... falsch?

          Nein. Bei Attributnamen spielt Groß- und Kleinschreibung keine Rolle. Es _muss_ dann aber auch nicht onMouseover heißen, sonder es _kann_ so heißen. Wenn die Eventhandler aber z.B. im JavaScript verwendet werden, dann _muss_ es onmouseover heißen, weil JavaScript case-sensitive ist. Wenn man _dort_ onMouseover schreibt, ist das _nicht_ identisch mit dem Eventhandler, der nun mal onmouseover heißt.

          Bsp:
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                  "http://www.w3.org/TR/html4/strict.dtd">
          <html>
          <head>
          <title>Eventhandler</title>
          <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
          </head>
          <body>
          <p id="Absatz" oNmOuSeOvEr="this.style.backgroundColor='yellow';" oNmOuSeOuT="this.style.backgroundColor='transparent';">Bitte hier mit der Maus drüberfahren.</p>
          <p><button ONCLICK="document.getElementById('Absatz').onmouseover=function() {this.style.backgroundColor='red'};">andere Hoverfarbe</button></p>
          </body>
          </html>

          Du siehst, die Attributnamen in den Tags sind case-insensitive. Schreibst Du aber im JavaScript
          document.getElementById('Absatz').onMouseover=function() {this.style.backgroundColor='red'};
          wird es nicht mehr funktionieren.

          viele Grüße

          Axel

          1. Hi,

            Nein. Bei Attributnamen spielt Groß- und Kleinschreibung keine Rolle.

            Fehlerhafte Pauschalisierung, da das abhängig von der HTML-Version ist. Ab XHTML ist nur Kleinschreibung erlaubt.

            cu,
            Andreas

            --
            MudGuard? Siehe http://www.mud-guard.de/
            1. Hallo,

              Nein. Bei Attributnamen spielt Groß- und Kleinschreibung keine Rolle.
              Fehlerhafte Pauschalisierung, da das abhängig von der HTML-Version ist. Ab XHTML ist nur Kleinschreibung erlaubt.

              *g*
              Fehlerhafte Begründung der richtigen Korrektur ;-))
              In _allen_ HTML-Versionen sind Attributnamen case-insensitive. In XHTML ist das nicht mehr der Fall, weil XML case-sensitive ist. Meiner Meinung nach, ist XHTML _keine_ HTML-Version, sondern eine XML-basierte Erweiterung von HTML, weswegen es auch nicht HTML5 heißt.

              viele Grüße ;-))

              Axel

              1. Hi,

                Nein. Bei Attributnamen spielt Groß- und Kleinschreibung keine Rolle.
                Fehlerhafte Pauschalisierung, da das abhängig von der HTML-Version ist. Ab XHTML ist nur Kleinschreibung erlaubt.
                *g*
                Fehlerhafte Begründung der richtigen Korrektur ;-))

                Ne, auch XHTML ist eine HTML-Version.

                Begründung 1: das root-Element heißt immer noch html, nicht xhtml.
                Begründung 2: Es ist Extensible HTML
                Begründung 3: Es ist nur eine "Reformulation of HTML 4"

                ;-)

                cu,
                Andreas

                --
                MudGuard? Siehe http://www.mud-guard.de/
        3. Hi,

          Sind dann alle Beispiele in SELFHTML wie bei http://selfhtml.teamone.de/javascript/sprache/eventhandler.htm#onmouseover,

          Das Code-Beispiel im Text ist falsch, da der Doctype fehlt ;-)
          Das Beispiel an sich (das, was im neuen Fenster angezeigt wird) ist korrekt, denn dort ist der HTML 4.01-Transitional Doctype angegeben.
          Somit ist Groß- und Kleinschreibung erlaubt.

          Wäre die Seite eine XHTML-Seite, müßte es zwingend 'onmouseover' (also nur Kleinbuchstaben) geschrieben werden.

          http://selfhtml.teamone.de/javascript/objekte/htmlelemente.htm#center... falsch?

          Hier verhält es sich genauso.

          cu,
          Andreas

          --
          MudGuard? Siehe http://www.mud-guard.de/