1unitedpower: Schönheitswettbewerb

Beitrag lesen

Kurz gesagt: Programmieren ist eine Frage der Lesbarkeit.

Dann lass uns diesen zentralen Punkt dochmal inhaltlich diskutieren. Ich mache gerne den Anfang und erkläre wieso ich das Perl-Skript in punkto Lesbarkeit und Aussdrucksstärke dem Haskell-Programm unterlegen finde. Ich bin gespannt deine Erwiderung darauf zu lesen. Hier nochmal die beiden Kandidaten im direkt Vergleich:

sub f1{ 
    my $x = shift;
    return sub{
        my $y = shift;
        $x * $y;
    }
}
f1 = (*)

Das Perl-Skript ist unnötig ausschweifend, in natürlicher Sprache: „Definiere eine Subroutine namens f1, im Funktionskörper lege eine lokale Variable $x an, belege die Variable mit dem ersten Wert meines impliziten Parameter-Arrays und entferne den Wert aus selbigem, dann gib eine anonyme Subroutine zurück, in deren Funktionskörper, lege eine weitere lokale Variable $y an, belege die Variable abermals mit dem ersten Wert aus dem impliziten Parameter-Array und lösche den Wert aus dem Array, schließlich lass die innere Funktion das Produkt von $x und $y zurückgeben.“

Die Haskell-Definition dagegegn ist präzise und pointiert, sinngemäß „f1 ist ein Alias für die Multiplikation.“

Das war in natürlicher Sprache, was auf semantischer Ebene passiert. Rein syntaktisch, ist das Perl-Skript mit administrativen Symbolen aufgebläht, in Haskell ist nur das Klammernpaar um den Multiplikations-Stern administrativer Natur.

Zusätzlich hat die Haskell-Definition mit weniger Worten mehr zum Ausdruck gebracht: Die Funktion f1 ist typsicher, wenn sie mit einem String oder einem beliebigem nicht numerischen Wert aufgerufen wird, gibt es einen Typfehler zur Compilezeit. Außerdem funktioniert die Haskell-Variante ohne weiteres Zutun auch mit unbeschränkt großen Zahlen und beliebig genauen reellen Zahlen.

Abschließend komme ich zu der Einschätzung, dass das Haskell-Programm präzise und ausdrucksstark ist, das Perl-Programm dagegen geschwätizg und ausdrucksschwach. Du bist an der Reihe mich vom Gegenteil zu überzeugen.

0 49

Ganz kleines JavaScript-Programm

Julia
  • javascript
  1. 1
    JürgenB
    1. 0
      Julia
      1. 0
        Felix Riesterer
        1. 0
          J o
  2. 0
    J o
    1. 0
      Julia
  3. 5
    Orlok
    • javascript
    • programmiertechnik
  4. 3
    Felix Riesterer
    1. 2
      dedlfix
      1. 0
        pl
    2. 2

      Scope

      Orlok
      • javascript
      • perl
      1. 0
        Felix Riesterer
        1. 0
          pl
          1. 0
            Felix Riesterer
            1. 0
              pl
              1. 0
                Felix Riesterer
      2. 0
        pl
        1. 0
          pl
          • perl
        2. 1
          Tabellenkalk
          • perl
          1. 0
            pl
            1. 1
              Tabellenkalk
        3. 0

          Schönheitswettbewerb

          1unitedpower
          • programmiertechnik
          1. 0
            pl
            1. 0
              1unitedpower
              1. 0
                pl
                1. 0
                  1unitedpower
                  1. 0
                    pl
                    1. 4
                      1unitedpower
                      1. 0
                        Matthias Apsel
                        1. 1
                          1unitedpower
                          1. 0
                            pl
                            1. 0
                              Matthias Apsel
                            2. 0
                              1unitedpower
                              1. 0
                                pl
                                1. 0
                                  pl
                                  1. 0
                                    1unitedpower
                                2. 0
                                  1unitedpower
                                  1. 0
                                    pl
                                    1. 0
                                      1unitedpower
                      2. 0
                        Rolf B
                        1. 0
                          1unitedpower
                          1. 0
                            Rolf B
                            1. 0
                              1unitedpower
                        2. 0
                          pl
      3. 0

        Dynamic Scope

        pl
  5. 0
    pl
    1. 0
      Matthias Apsel
  6. 1
    Es