web-dev-qa-db-fra.com

Conventions de Lua Semicolon

Je me demandais s'il existait une convention générale pour l'utilisation des points-virgules dans Lua, et si oui, où/pourquoi devrais-je les utiliser? Je viens d'un contexte de programmation, donc les déclarations finales avec un point-virgule semblent intuitivement correctes. Cependant, je me demandais pourquoi ils sont "optional" alors qu'il est généralement accepté que les points-virgules se terminent par des instructions dans d'autres langages de programmation. Peut-être qu'il y a un avantage?

Par exemple: Dans le guide de programmation lua , ils sont tous acceptables, équivalents et syntaxiquement précis:

a = 1
b = a*2

a = 1;
b = a*2;

a = 1 ; b = a*2

a = 1   b = a*2    -- ugly, but valid

L'auteur mentionne également: Usually, I use semicolons only to separate two or more statements written in the same line, but this is just a convention. 

Est-ce généralement accepté par la communauté Lua, ou y a-t-il une autre façon préférée par la plupart? Ou est-ce aussi simple que ma préférence personnelle?

19
MrHappyAsthma

Les points-virgules de Lua ne sont généralement requis que pour l'écriture de plusieurs déclarations sur une ligne.

Donc par exemple:

local a,b=1,2; print(a+b)

Alternativement écrit comme:

local a,b=1,2
print(a+b)

De mémoire, je ne me souviens d'aucune autre fois à Lua où je devais utiliser un point-virgule.

Edit: en regardant dans la référence 5.2 de Lua, je vois un autre endroit commun où vous auriez besoin d’utiliser des points-virgules pour éviter toute ambiguïté - où vous avez une instruction simple suivie d’un appel de fonction ou de parenthèses pour regrouper une instruction composée. voici l'exemple de manuel situé ici :

--[[ Function calls and assignments can start with an open parenthesis. This 
possibility leads to an ambiguity in the Lua grammar. Consider the 
following fragment: ]]

a = b + c
(print or io.write)('done')

-- The grammar could see it in two ways:

a = b + c(print or io.write)('done')

a = b + c; (print or io.write)('done')
25
Mike Corcoran

Pour avoir plus d'une chose sur une ligne, par exemple:

c=5
a=1+c
print(a) -- 6

pourrait être réduit à:

c=5; a=1+c; print(a) -- 6

il convient également de noter que si vous êtes habitué à JavaScript, ou à quelque chose du genre, où vous devez terminer une ligne par un point-virgule (;), et que vous êtes particulièrement habitué à l'écrire, cela signifie que vous n'aurez pas pour supprimer ce point-virgule (;), et croyez-moi, je suis aussi habitué à Javascript et j'oublie vraiment vraiment que vous n'avez pas besoin du point-virgule (;), à chaque fois que j'écris une nouvelle ligne!

0
TheRealSuicune