Orlok: Welche Pseudoklasse benutze für meinen Link

Beitrag lesen

Hallo beatovich

Meine Meinung dazu: Das ist jetzt zu wenig. Parameter zu verwenden, um sich let oder var zu sparen, ist schlechter Stil.

Da will ich jetzt eine technische Begründung dazu.

Parameter an Stelle von lokalen Variablen zu deklarieren ist schlechter Stil, weil es den eigentlichen Zweck der Namensbindung verschleiert.

Wenn man für eine Funktion Parameter deklariert, dann bringt man damit zum Ausdruck, dass die Funktion bei ihrem Aufruf Argumente erwartet, welche an die in der Parameterliste notierten Namen gebunden werden sollen. Parameter definieren Eingabewerte für die Funktion. Lokale Variablen tun dies nicht.

Lokale Variablen dienen im Wesentlichen dazu, innerhalb der Funktion Zwischenergebnisse zu speichern, zum Beispiel um mehrfache Berechnungen des selben Wertes zu vermeiden oder um durch die Aufteilung längerer Ausdrücke die Lesbarkeit des Codes zu verbessern.

Parameter sind Teil der öffentlichen Schnittstelle einer Funktion.

Dass Parameter wie in ECMAScript einen impliziten Standardwert besitzen, ist keine Selbstverständlichkeit. Die wohl meisten Programmiersprachen würden einen Funktionsaufruf mit einem Fehler quittieren, bei dem weniger Argumente übergeben werden als zuvor Parameter deklariert wurden.

Nehmen wird zum Beispiel die folgende Funktion in Rust:

fn add(a: i32, b: i32) -> i32 { a + b }

Folgender Aufruf führt zu einem Fehler:

fn main() {
    let result = add(5);
}

// error: this function takes 2 parameters but 1 parameter was supplied

In einigen Sprachen können sogar im selben Scope mehrere Funktionen oder Funktionsklauseln mit demselben Namen deklariert werden. Der Compiler oder Interpreter entscheidet dann nach Anzahl und gegebenenfalls Typ der formalen Parameter, welche Funktion beziehungsweise Klausel aufgerufen wird.

Hierzu ein Beispiel in Elixir:

defmodule Math do
    def add(a, b),    do: a + b
    def add(a, b, c), do: a + add(b, c)
end


IO.puts Math.add(2, 3, 5)

In ECMAScript wird zwar bei zuwenig Argumenten beim Funktionsaufruf kein Fehler geworfen und es können nicht mehrere Funktionen unter demselben Namen im selben Scope deklariert werden, aber auch hier gilt, dass über die Parameter Informationen über die Funktion nach außen gegeben werden.

const add = (a, b) => a + b;

add.length // 2

Die Eigenschaft length von Funktionsobjekten gibt Auskunft darüber, wieviele Argumente von der Funktion erwartet werden. Genauer gesagt, wird dadurch sogar kommuniziert, wieviele Werte in jedem Fall übergeben werden sollten, da Parameter mit explizitem Standardwert ebenso wie Restparameter nicht mitgezählt werden.

Das tritt als Begründung allerdings hinter den Aspekt der Menschenlesbarkeit zurück.

Betrachte ich als Programmierer eine Funktion, dann geht der erste Blick in Richtung Signatur: Welchen Namen hat die Funktion? Welche Parameter besitzt sie? Wieviele Parameter gibt es und welche Werte werden an der jeweiligen Stelle erwartet? Ich würde nie damit rechnen, dass Parameter deklariert wurden, obwohl überhaupt keine Eingabewerte erwartet werden.

Eine solche Praxis erschwert das Verständnis des Codes massiv. Ein Blick auf die Funktionssignatur reicht nun nicht mehr aus, um zu Verstehen, wie mit der Funktion umzugehen ist. Stattdessen sind Leser gezwungen, auch den Körper der Funktion zu untersuchen, um zu erkennen, welche Werte beim Aufruf übergeben werden müssen.

Viele Grüße,

Orlok

0 58

Welche Pseudoklasse benutze für meinen Link

liebewinter
  • css
  • meinung
  1. 2
    Rolf B
    1. 0
      liebewinter
    2. 1
      Gunnar Bittersmann
      • css
      • html
      1. 0
        liebewinter
      2. 0
        liebewinter
        1. 0
          Matthias Apsel
          1. 0
            liebewinter
            1. 0
              ursus contionabundo
            2. 0
              Rolf B
              1. 0
                liebewinter
                1. 0
                  Rolf B
                  1. 0
                    liebewinter
  2. -1
    ursus contionabundo
    1. 0
      Rolf B
      1. 0
        ursus contionabundo
        1. 0
          Rolf B
          1. 0
            ursus contionabundo
        2. 1
          Rolf B
          1. 0
            ursus contionabundo
        3. 1
          Gunnar Bittersmann
          1. 0
            ursus contionabundo
        4. 1
          Matthias Apsel
          1. 0
            ursus contionabundo
    2. 0
      beatovich
      1. 0
        Matthias Apsel
        1. 0
          beatovich
          1. 0
            Matthias Apsel
            1. 0
              beatovich
        2. 0
          liebewinter
          1. 1
            Gunnar Bittersmann
            • javascript
            1. 0
              Gunnar Bittersmann
            2. 0
              beatovich
              1. 0
                Gunnar Bittersmann
                1. 0
                  beatovich
            3. 0
              liebewinter
              1. 0
                Gunnar Bittersmann
                • css
                • html
                • javascript
            4. 0
              liebewinter
              1. 0
                Rolf B
                1. 0
                  liebewinter
                  1. 0
                    Rolf B
                    1. 0
                      liebewinter
                      1. 0
                        Rolf B
                        1. 0
                          liebewinter
                        2. 0
                          Gunnar Bittersmann
                          • html
                          • php
                        3. 0
                          liebewinter
                    2. 0
                      Gunnar Bittersmann
                      • html
                      1. 0
                        Tabellenkalk
                2. 0
                  Gunnar Bittersmann
      2. 0
        Rolf B
        1. 0
          beatovich
          1. 0
            Rolf B
          2. 0
            beatovich
            1. 2
              Orlok
              • programmiertechnik
            2. 1
              Rolf B
              1. 0
                beatovich
                1. 0
                  Rolf B
                2. 0
                  Matthias Apsel