Readability vs minimalism / compactness / conciseness in language design: sono antagonisti?

3

Attualmente c'è una discussione nella mailing list di PHP-Internals riguardante l'implementazione di una sintassi breve per matrici e oggetti, principalmente [1, 2, ...] per matrici standard, ['one'=>1, 'two'=> 2, ...] per matrici associative e {'one'=>1, 'two'=> 2, ...} per oggetti e c'è un disaccordo generale che mi dà fastidio: alcune persone sostengono che sia meno leggibile.

I motivi principali per cui ho visto questa proposta è stato quello di aumentare la semplicità e la leggibilità quando si utilizza questa struttura dati fondamentale in PHP , ma sto riscontrando problemi nel processare il motivo per cui alcune persone lo considerano illeggibile, puoi persino vedere che la leggibilità è un item sia nella lista pro che contro , ed è sia un argomento per sostenitori che oppositori.

Il mio sospetto è che gli oppositori stiano semplicemente considerando il caso standard di array(...) rispetto a [...] , ma non vedono il caso nidificato, ovvero:

$TV = array(
    "flintstones" => (object)array(
        "series"   => "flintstones",
        "members"  => array(
            (object)array( "name" => "fred",    "role" => "lead", "age"  => 36, ),
            (object)array( "name" => "wilma",   "role" => "wife", "age"  => 31, ),
            (object)array( "name" => "pebbles", "role" => "kid",  "age"  =>  4, ),
        ),
    ),
    "jetsons"     => (object)array(
        "series"   => "jetsons",
        "members"  => array(
            (object)array( "name" => "george",  "role" => "lead", "age"  => 41, ),
            (object)array( "name" => "jane",    "role" => "wife", "age"  => 39, ),
            (object)array( "name" => "elroy",   "role" => "kid",  "age"  =>  9, ),
        ),
     ),
    "simpsons"    => (object)array(
        "series"   => "simpsons",
        "members"  => array(
            (object)array( "name" => "homer", "role" => "lead", "age"  => 34, ),
            (object)array( "name" => "marge", "role" => "wife", "age" => 37, ),
            (object)array( "name" => "bart",  "role" => "kid",  "age"  =>  11, ),
        ),
    ),
);

Diventerebbe questo:

$TV = [
    "flintstones" => {
        "series"   => "flintstones",
        "members"  => [
            { "name" => "fred",    "role" => "lead", "age"  => 36, },
            { "name" => "wilma",   "role" => "wife", "age"  => 31, },
            { "name" => "pebbles", "role" => "kid",  "age"  =>  4, },
        ],
    },
    "jetsons"     => {
        "series"   => "jetsons",
        "members"  => [
            { "name" => "george",  "role" => "lead", "age"  => 41, },
            { "name" => "jane",    "role" => "wife", "age"  => 39, },
            { "name" => "elroy",   "role" => "kid",  "age"  =>  9, },
        ],
     },
    "simpsons"    => {
        "series"   => "simpsons",
        "members"  => [
            { "name" => "homer", "role" => "lead", "age"  => 34, },
            { "name" => "marge", "role" => "wife", "age" => 37, },
            { "name" => "bart",  "role" => "kid",  "age"  =>  11, },
        ],
    },
];

Per me, il secondo caso sarebbe miglia più leggibile, anche rinfrescante poiché posso spostare gli occhi più rapidamente attraverso di esso.

C'è una chiara maggioranza di persone che vogliono la sintassi breve, ma sono molto interessato a sapere perché è il secondo esempio che ho fornito meno leggibile per alcuni (alcuni di loro sono ben noti sviluppatori, il che significa che devono aver considerato caso annidato).

In ogni caso ho visto questo argomento in altri posti, che il minimalismo non è la stessa leggibilità, ma perché in questo caso specifico ?, la sintassi breve è ben nota in altre lingue e nessuno si lamenta della leggibilità, quindi perché? .

Grazie

    
posta dukeofgaming 05.06.2011 - 19:40
fonte

3 risposte

4

La concisione non è la stessa cosa della leggibilità. Né la verbosità è la stessa cosa della illeggibilità. La leggibilità è una funzione di espressività (quanto la sintassi comunica), non la lunghezza. Esiste spesso una correlazione (fino ad un punto) tra concisione e leggibilità, ma non confondetela per causalità.

Nel caso in esame, le persone che si lamentano del fatto che la nuova versione manchi di leggibilità molto probabilmente stanno razionalizzando la loro paura irrazionale del cambiamento, anche il cambiamento positivo. Un numero molto elevato di lingue utilizza letterali simili per indicare array e array associativi (dizionari, hash) senza alcuna apparente penalizzazione per l'espressività o la leggibilità.

Per darti qualche prova aneddotica, Ruby si sta spostando dalla sintassi {:a => 2} per hash alla sintassi {a: 2} (stile JSON). Argomenti simili pro / contro sono stati fatti per ragioni simili da detrattori ma, una volta che le persone si sentono a proprio agio con la nuova sintassi, tendono ad accettarle e ad adottarle senza difficoltà.

    
risposta data 05.06.2011 - 21:09
fonte
3

Oserei affermare che la reazione che si ottiene è probabilmente solo una resistenza al cambiamento.

[1, 2, 3] è perfettamente leggibile. Avere una sorta di espressione letterale molto compatta per le collezioni è qualcosa che dovrebbe avere un linguaggio moderno. E la maggior parte fa in effetti.

Tuttavia, c'è un problema con => e con {fields} . Introduce ambiguità.

{} può significare blocco vuoto (che è nullo o vuoto) e o può significare oggetto vuoto. Non ha molta importanza in PHP, ma nelle lingue in cui tutto è un'espressione, questo diventa un problema.

E [2 => 5] non è chiaro. È [FALSE] o è [NULL, NULL, 5] ?

Quando la concisione introduce ambiguità, danneggia la leggibilità. Tuttavia, come già detto Rein, la concisione e la leggibilità sono solitamente correlate. Questo è infatti finché la concisione sopprime il rumore non necessario.

    
risposta data 05.06.2011 - 22:12
fonte
3

L'intera array() thing è una delle parti che impedisce a PHP di essere davvero espressivo. Con i letterali di raccolta questo verboso, è difficile scrivere in uno stile funzionale, anche quando sarebbe stata la soluzione più appropriata.

    
risposta data 06.06.2011 - 18:08
fonte

Leggi altre domande sui tag