2016-04-17 7 views
2

Viele Sprachen haben mehrere Regeln wie folgt in ihre Grammatiken, die Hinter Komma verbieten:Was sind die Nachteile von optionalen Nachkommas?

call-expr: ident '(' expr-list? ')'; 
expr-list: expr | expr-list ',' expr; 

jedoch die folgende Formulierung erlaubt (aber nicht erforderlich) Hinter Kommas, die well-known advantages hat:

call-expr: ident '(' expr-list? expr? ')'; 
expr-list: expr ',' | expr-list expr ','; 

Gibt es irgendeinen Nachteil um immer mindestens intern zu verwenden?

+0

Perl erlaubt nachfolgende Kommas. – Laurel

+0

Ja, mir ist bewusst, dass viele Sprachen es erlauben *. – o11c

+0

Es ist nicht etwas, was Sie wahrscheinlich wissen würden, wenn Sie diese Sprache nicht kennen. – Laurel

Antwort

1

Der Nachteil ist Mehrdeutigkeit, wo leere Einträge zulässig sind. Betrachten Sie die folgenden Arrays in Javascript:

  • [1,,3]
  • [1,,3,]

Sind sie identisch? Ist ihre Länge identisch? Sollte es sein? (Antwort: ja, aber nicht in IE

= 7)
1

Sprachen, die es ermöglichen, Prozessparameter zu belassen (ich denke vor allem an die alte HP-Systemsprache SPL; da könnten noch andere sein) würden daran scheitern Der Compiler würde annehmen, dass nach dem abschließenden Komma ein Parameter übersprungen wurde, den die Prozedur nicht verlangt. Ich gebe zu, dass dies ein kleiner Nachteil ist - auf der anderen Seite, IMO die angegebenen Vorteile sind ebenso gering.

Verwandte Themen