Qu'est-ce qui permet à certaines langues de faire cela et à d'autres de ne pas le faire? Pourquoi ne pas garder un système uniforme pour ajouter le point-virgule à la fin?
Robert a donné une bonne réponse concernant Swift, je vais essayer d'ajouter un peu plus sur l'analyse en général et pourquoi utiliser ou non des points-virgules.
Lorsque vous compilez le programme, il y a plusieurs étapes avant que votre fichier source ne soit transformé en code exécutable, l'une des premières étant la lecture et l' analyse . Pendant l'analyse, votre code est transformé d'une séquence de caractères en une représentation structurée selon la grammaire de la langue. Pour cela, il est nécessaire que les éléments qui composent votre code (variables, constantes, déclarations, etc.) soient en quelque sorte identifiés et séparés. Lorsque vous faites une déclaration comme:
int someNumber = 0;
C'est juste une séquence de caractères qui doit en quelque sorte être tournée vers le concept "créer une" chose "appelée someNumber
de type int
et lui assigner 0
" .
Cela nécessite d'identifier exactement où commence et se termine l'instruction. Imaginez si vous aviez ceci:
int someNumber = 0;
int otherNumber = 1;
Il faudrait savoir que ce sont deux déclarations différentes. Le ;
langage en C est utilisé pour cela, donc l'analyseur lit les caractères jusqu'à ce qu'il en trouve un, et tente de comprendre ce qui vient d'être lu comme une seule instruction. Cela permet, comme l'a dit Robert, d'avoir plusieurs déclarations sur la même ligne, comme:
int someNumber = 0; int otherNumber = 1;
Ce qui a exactement le même effet que de les écrire sur deux lignes.
Dans d'autres langages, comme Python , vous devez placer chaque instruction sur une ligne différente.
x = 3
if x < 10:
print 'x smaller than 10'
else:
print 'x is bigger than 10 or equal'
Il n'est donc pas nécessaire d'ajouter un ;
, car le langage lui-même vous empêche d'ajouter des instructions sur la même ligne!
Pourtant, d'autres langages, comme LISP ou Scheme , ont une façon très différente de regrouper les instructions (ok, ce ne sont pas vraiment des instructions, mais ignorons cela pour l'instant). Vous n'avez donc que des parenthèses pour tout:
(define (do-stuff x)
(begin
(display (format "value: ~a" x))
x))
Encore une fois, vous n'avez pas besoin ;
juste parce que vous utilisez les mêmes symboles ( )
, (
) pour des choses qui dans d' autres langues sont {
, }
, :
, etc. Quelqu'un qui ne connaît que la syntaxe Lisp peut vous demander: Pourquoi avez - vous besoin ;
à la fin de vos déclarations ?
Juste pour ajouter un exemple plus étrange: OCaml a non seulement un point-virgule à la fin des instructions ... il en a deux!
let rec fact x =
if x <= 1 then 1 else x * fact (x - 1);;
Pourquoi? Je ne sais pas. :)
Différentes langues sont conçues avec des objectifs différents et des philosophies différentes. Si toutes les langues partageaient la même syntaxe et les mêmes conventions, elles ne vous permettraient probablement que de faire les mêmes choses de la même manière.