Cette comparaison des langages de programmation compare les caractéristiques de la syntaxe du langage (format) pour plus de 50 langages de programmation informatique.
Expressions
Les expressions du langage de programmation peuvent être globalement classées en quatre structures syntaxiques :
- notation de préfixe
- Zézayer
(* (+ 2 3) (expt 4 5))
- notation infixe
- Fortran
(2 + 3) * (4 ** 5)
- suffixe, suffixe ou notation polonaise inversée
- Quatrièmement
2 3 + 4 5 ** *
- notation de type mathématique
- TUTEUR
(2 + 3)(45) $$ note implicit multiply operator
Déclarations
Lorsqu'un langage de programmation contient des instructions , il a généralement des conventions pour :
- séparateurs d’instructions;
- terminateurs d'instructions ; et
- continuation de la ligne
Un séparateur d'instructions délimite la frontière entre deux instructions distinctes. Un terminateur d'instructions définit la fin d'une instruction individuelle. Les langages qui interprètent la fin de ligne comme la fin d'une instruction sont appelés langages « orientés ligne ».
La « continuation de ligne » est une convention dans les langages orientés ligne où le caractère de nouvelle ligne peut potentiellement être interprété à tort comme un terminateur d'instruction. Dans ces langages, il permet à une seule instruction de s'étendre sur plusieurs lignes.
Continuation de la ligne
La continuation de ligne est généralement effectuée dans le cadre de l'analyse lexicale : une nouvelle ligne entraîne normalement l'ajout d'un jeton au flux de jetons, à moins qu'une continuation de ligne ne soit détectée.
- Espaces blancs – Langues qui n’ont pas besoin de continuations
- Ada – Les lignes se terminent par un point-virgule
- C# – Les lignes se terminent par un point-virgule
- JavaScript – Les lignes se terminent par un point-virgule (ce qui peut être déduit)
- Lua
- OCaml
- Esperluette comme dernier caractère de la ligne
- Barre oblique inverse comme dernier caractère de la ligne
- bash et autres shells Unix
- Préprocesseur C , C++
- Mathematica , Langage Wolfram
- Python
- Rubis
- JavaScript – uniquement dans les chaînes entre guillemets simples ou doubles
- Apostrophe inversée comme dernier caractère de la ligne
- Trait d'union comme dernier caractère de la ligne
- Souligner comme dernier caractère de la ligne
- Ellipse (en tant que trois points – pas un caractère spécial)
- MATLAB : Le jeton d'ellipse ne doit pas nécessairement être le dernier caractère de la ligne, mais tout ce qui le suit sera ignoré. (En substance, il commence un commentaire qui s'étend jusqu'au premier caractère de nouvelle ligne suivant (c'est-à-dire y compris). Comparez cela avec un commentaire en ligne, qui s'étend jusqu'à la première nouvelle ligne suivante.)
- Délimiteur de virgule comme dernier caractère de la ligne
- Ruby (le commentaire peut suivre le délimiteur)
- Délimiteur de crochet gauche comme dernier caractère de la ligne
- Fichier batch : le démarrage d'un bloc entre parenthèses peut permettre la continuation de la ligne
- Ruby : parenthèse gauche, crochet gauche ou accolade gauche
- Opérateur comme dernier objet de la ligne
- Ruby (le commentaire peut suivre l'opérateur)
- Opérateur comme premier caractère de la ligne continue
- AutoHotkey : tous les opérateurs d'expression sauf ++ et --, et une virgule ou un point
- Barre oblique inverse comme premier caractère de la ligne continue
- Une certaine forme de commentaire en ligne sert de continuation de ligne
- Assembleur Turbo :
\ - m4 :
dnl - Tex :
%
- Position du personnage
- Fortran 77 : Une ligne sans commentaire est une continuation de la ligne sans commentaire précédente si un caractère autre qu'un espace apparaît dans la colonne 6. Les lignes de commentaire ne peuvent pas être continuées.
- COBOL : Les constantes de chaîne peuvent être continuées en ne terminant pas la chaîne d'origine dans une clause PICTURE par
', puis en insérant un-dans la colonne 7 (la même position que le*commentaire for est utilisée.) - TUTEUR : Les lignes commençant par une tabulation (après toute indentation requise par le contexte) continuent la commande précédente.
- [Fin et début] en utilisant des guillemets normaux
- C , préprocesseur C++ : la chaîne se termine normalement et continue en commençant par une citation sur la ligne suivante.
Bibliothèques
Importer une bibliothèque est un moyen de lire des routines, programmes ou packages externes, éventuellement compilés. Les importations peuvent être classées par niveau (module, package, classe, procédure,...) et par syntaxe (nom de directive, attributs,... )
- Importation de fichiers
addpath(directory)MATLABCOPY filename.COBOL:-include("filename").Prologue#include file="filename"ASPIC#include "filename", AutoHotkey , AutoIt , C , C++#include <filename>AutoHotkey , AutoIt , C , C++#import "filename", Objectif C#import <filename>Objectif-CImport["filename"]Mathematica , Langage Wolframinclude'filename'Fortraninclude "filename";PHPinclude [filename] program, Choisissez Basic#include [filename] programChoisissez Basicinclude!("filename");Rouillerload "filename"Rubisload %filenameRougerequire('filename')Luarequire "filename";Perl , PHPrequire"filename"Rubissource(filename)R@import("filename");Zig
- Importation de paquets
#include filenameC , C++#[path = "filename"] mod altname;, Rouiller@import module;Objectif-C<<nameMathematica , Langage Wolfram:-use_module(module).Prologue :from module import *Pythonextern crate libname;, Rouillerextern crate libname as altname;Rouillermod modname;, Rouillerlibrary("package")R :IMPORT moduleObéronimport altname "package/name"Aller :import package.module;, Dimport altname = package.module;Dimport Module, Haskellimport qualified Module as MHaskellimport package.*Java , MATLAB , Kotlinimport "modname";JavaScript :import altname from "modname";, JavaScript :import packageÉchelleimport package._, Échelleimport moduleRapideimport moduleV (Vlang)import module, Python- require('nom du mod') Lua :
require"gem", Rubisuse module, Fortran 90 +use module, only : identifierFortran 90+use Module;, Perluse Module qw(import options);Perluse Package.NameCobrauses unitPascalwith packageAda@import("pkgname");Zig
- Importation de classe
from module import ClassPythonimport package.classJava , MATLAB , Kotlinimport class from "modname";, JavaScriptimport {class} from "modname";, JavaScriptimport {class as altname} from "modname";JavaScriptimport package.class, Échelleimport package.{ class1 => alternativeName, class2 }, Échelleimport package._Échelleuse Namespace\ClassName;, PHPuse Namespace\ClassName as AliasName;PHP
- Importation de procédure/fonction
from module import functionPython :import package.module : symbol;, D :import package.module : altsymbolname = symbol;D :import Module (function)Haskell :import function from "modname";, JavaScript :import {function} from "modname";, JavaScript :import {function as altname} from "modname";JavaScript :import package.functionMATLAB :import package.class.function, Échelle :import package.class.{ function => alternativeName, otherFunction }Échelle :useModule('symbol');Perle :use function Namespace\function_name;, PHP :use Namespace\function_name as function_alias_name;PHP :use module::submodule::symbol;, Rouiller :use module::submodule::{symbol1, symbol2};, Rouiller :use module::submodule::symbol as altname;Rouiller :
- Importation constante
use const Namespace\CONST_NAME;PHP
Les déclarations ci-dessus peuvent également être classées selon qu'elles constituent une commodité syntaxique (permettant de faire référence à des éléments par un nom plus court, mais ils peuvent toujours être référencés par un nom entièrement qualifié sans importation), ou selon qu'elles sont réellement nécessaires pour accéder au code (sans quoi il est impossible d'accéder au code, même avec des noms entièrement qualifiés).
- Commodité syntaxique
- Code d'accès requis
import altname "package/name"Allerimport altname from "modname";JavaScriptimport modulePython
Blocs
Un bloc est une notation pour un groupe de deux ou plusieurs instructions, expressions ou autres unités de code qui sont liées de manière à constituer un tout.
- Accolades (ou accolades)
{...}
- Langages de programmation avec accolades : C , C++ , Objective-C , Go , Java , JavaScript / ECMAScript , V (Vlang) , C# , D , Perl , PHP (
foretloopboucles, ou passer un bloc en argument), R , Rust , Scala , S-Lang , Swift , PowerShell , Haskell (en notation do), AutoHotkey , Zig
- Entre parenthèses
(...)
- Batchfile , F# (syntaxe légère), OCaml , Prolog , ML standard
- Crochets
[...]
- Rebol , Red , Self , Smalltalk (les blocs sont des objets de première classe, également appelés fermetures)
begin...end
- Ada , ALGOL , F# (syntaxe verbeuse), Pascal , Ruby (
for,do/while&do/untilboucles), OCaml , SCL , Simula , Erlang .
do...end
do...done
- Bash (
for&whileboucles), F# (syntaxe verbeuse) Visual Basic , Fortran , TUTOR (avec indentation obligatoire du corps du bloc), Visual Prolog
do...end
- Lua , Ruby (passer des blocs comme arguments,
forboucle), Seed7 (enferme les corps de boucle entredoetend)
- X ...
end(par exempleif...end):
- Ruby (
if,while,until,def,class,moduleinstructions), OCaml (for&whileboucles), MATLAB (if&switchconditions,for&whileboucles,tryclause,package,classdef,properties,methods,events, &functionblocs), Lua (then/else&function)
- (
begin...)
- (programme ...)
- (
do...)
- Échancrure
- Langages de règle de hors-jeu : Boo , Cobra , CoffeeScript , F# , Haskell (en notation do lorsque les accolades sont omises), LiveScript , occam , Python , Nemerle (facultatif ; l'utilisateur peut utiliser une syntaxe sensible aux espaces au lieu de la syntaxe des accolades s'il le souhaite), Nim , Scala (facultatif, comme dans Nemerle)
- Langages à forme libre : la plupart des descendants d' ALGOL (y compris C , Pascal et Perl ) ; langages Lisp
- Autres
- Ada , Visual Basic , Seed7 :
if...end if - APL :
:If...:EndIfou:If...:End - Bash , sh et ksh :
if...fi,do...done,case...esac; - ALGOL 68 :
begin...end,(...),if...fi,do...od - Lua , Pascal , Modula-2 , Seed7 :
repeat...until - COBOL :
IF...END-IF,PERFORM...END-PERFORM, etc. pour les instructions ; ....pour les phrases. - Visual Basic .Net :
If...End If,For...Next,Do...Loop - Petit Basique :
If...EndIf,For...EndFor,While...EndWhile
Commentaires
Les commentaires peuvent être classés par :
- style (en ligne/en bloc)
- règles d'analyse (ignorées/interpolées/stockées en mémoire)
- récursivité (emboîtable/non emboîtable)
- utilisations ( docstrings /commentaires jetables/autre)
Commentaires en ligne
Les commentaires en ligne sont généralement ceux qui utilisent un caractère de nouvelle ligne pour indiquer la fin d'un commentaire et un délimiteur arbitraire ou une séquence de jetons pour indiquer le début d'un commentaire.
Exemples :
Bloquer les commentaires
Les commentaires en bloc sont généralement ceux qui utilisent un délimiteur pour indiquer le début d'un commentaire et un autre délimiteur pour indiquer la fin d'un commentaire. Dans ce contexte, les espaces et les caractères de nouvelle ligne ne sont pas comptés comme des délimiteurs. Dans les exemples, le symbole ~ représente le commentaire et les symboles qui l'entourent sont considérés par les interprètes/compilateurs comme des délimiteurs.
Exemples :
Variantes uniques
- Fortran
- L'indentation des lignes dans Fortran 66/77 est importante. L'instruction proprement dite se trouve dans les colonnes 7 à 72 d'une ligne. Tout caractère autre qu'un espace dans la colonne 6 indique que cette ligne est une continuation de la ligne précédente. Un '
C' dans la colonne 1 indique que cette ligne entière est un commentaire. Les colonnes 1 à 5 peuvent contenir un numéro qui sert d'étiquette. Les colonnes 73 à 80 sont ignorées et peuvent être utilisées pour les commentaires ; à l' époque des cartes perforées , ces colonnes contenaient souvent un numéro de séquence afin que le jeu de cartes puisse être trié dans le bon ordre si quelqu'un faisait tomber les cartes par accident. Fortran 90 a supprimé la nécessité de la règle d'indentation et a ajouté des commentaires en ligne, en utilisant le!caractère comme délimiteur de commentaire.
- COBOL
- Dans le code au format fixe, l'indentation des lignes est importante. Les colonnes 1 à 6 et les colonnes à partir de 73 sont ignorées. Si un
*ou/se trouve dans la colonne 7, cette ligne est un commentaire. Jusqu'à COBOL 2002, si unDoudse trouvait dans la colonne 7, il définissait une « ligne de débogage » qui était ignorée à moins que le compilateur ne reçoive l'instruction de la compiler.
- Cobra
- Cobra prend en charge les commentaires en bloc avec «
/#...#/», qui ressemble au «/*...*/» souvent utilisé dans les langages basés sur C, mais avec deux différences. Le#caractère est réutilisé à partir du formulaire de commentaire sur une seule ligne «#... », et les commentaires en bloc peuvent être imbriqués, ce qui est pratique pour commenter de gros blocs de code.
- Boucle
- Curl prend en charge les commentaires de bloc avec des balises définies par l'utilisateur comme dans
|foo# ... #foo|.
- Lua
- Comme pour les chaînes brutes, il peut y avoir n'importe quel nombre de signes égaux entre les crochets, à condition que les balises d'ouverture et de fermeture aient un nombre correspondant de signes égaux ; cela permet l'imbrication à condition que les commentaires de bloc/chaînes brutes imbriqués utilisent un nombre différent de signes égaux que leur commentaire englobant :
--[[comment --[=[ nested comment ]=] ]]. Lua ignore la première nouvelle ligne (si présente) qui suit directement la balise d'ouverture.
- Perl
- Les commentaires en bloc dans Perl sont considérés comme faisant partie de la documentation et sont appelés Plain Old Documentation (POD). Techniquement, Perl n'a pas de convention pour inclure des commentaires en bloc dans le code source, mais POD est couramment utilisé comme solution de contournement.
- PHP
- PHP prend en charge les commentaires de style C/C++ standard, mais prend également en charge le style Perl.
- Python
- L'utilisation de guillemets triples pour commenter les lignes de la source ne forme pas réellement un commentaire. Le texte inclus devient une chaîne littérale, que Python ignore généralement (sauf lorsqu'il s'agit de la première instruction dans le corps d'un module, d'une classe ou d'une fonction ; voir docstring ).
- Élixir
- L'astuce ci-dessus utilisée dans Python fonctionne également dans Elixir, mais le compilateur lancera un avertissement s'il le détecte. Pour supprimer l'avertissement, il faudrait ajouter le sigil
~S(qui empêche l'interpolation de chaîne) à la chaîne entre guillemets triples, ce qui mène à la construction finale~S""" ... """. De plus, Elixir prend en charge une forme limitée de commentaires de bloc en tant que fonctionnalité officielle du langage, mais comme dans Perl, cette construction est entièrement destinée à écrire de la documentation. Contrairement à Perl, elle ne peut pas être utilisée comme solution de contournement, étant limitée à certaines parties du code et générant des erreurs ou même supprimant des fonctions si elle est utilisée ailleurs.
- Raku
- Raku est utilisé
#`(...)pour désigner les commentaires en bloc. Raku permet en fait l'utilisation de parenthèses appariées « droite » et « gauche » après#`(c'est-à-dire#`(...),#`[...],#`{...},#`<...>et même les plus compliqués#`{{...}}sont tous des commentaires en bloc valides). Les parenthèses peuvent également être imbriquées à l'intérieur des commentaires (c'est-à-dire qu'elles#`{ a { b } c }vont jusqu'à la dernière accolade fermante).
- Rubis
- Le commentaire de bloc dans Ruby s'ouvre à
=beginla ligne et se ferme à=endla ligne.
- Argot
- La région des lignes entourées par les
#<tag>délimiteurs#</tag>et est ignorée par l'interpréteur. Le nom de la balise peut être n'importe quelle séquence de caractères alphanumériques pouvant être utilisée pour indiquer comment le bloc entouré doit être déchiffré. Par exemple,#<latex>il peut indiquer le début d'un bloc de documentation au format LaTeX.
- Schéma et racket
- Le prochain composant syntaxique complet (expression s) peut être commenté avec
#;.
- ABAP
ABAP prend en charge deux types de commentaires différents. Si le premier caractère d'une ligne, y compris l'indentation, est un astérisque ( *), la ligne entière est considérée comme un commentaire, tandis qu'un guillemet simple ( ") commence un commentaire en ligne qui agit jusqu'à la fin de la ligne. Les commentaires ABAP ne sont pas possibles entre les instructions EXEC SQLet ENDEXECparce que le SQL natif a d'autres utilisations pour ces caractères. Dans la plupart des dialectes SQL, le double tiret ( --) peut être utilisé à la place.
- Langues ésotériques
- De nombreux langages de programmation ésotériques suivent la convention selon laquelle tout texte non exécuté par le pointeur d'instruction (par exemple, Befunge ) ou auquel une signification est autrement attribuée (par exemple, Brainfuck ) est considéré comme un « commentaire ».
Comparaison de commentaires
Il existe une grande variété de styles de syntaxe pour déclarer des commentaires dans le code source. BlockCommenten italique est utilisé ici pour indiquer le style de commentaire en bloc. InlineCommenten italique est utilisé ici pour indiquer le style de commentaire en ligne.
lt;#code>(* BlockComment *)/code>{{efn| Fortran ne prend pas en charge les commentaires de bloc traditionnels, mais certains compilateurs prennent en charge les directives de préprocesseur dans le style de C / C++ , permettant à un programmeur d'émuler des commentaires multilignes.br/>} lt;#code>(* BlockComment *)/code>{{efn| Fortran ne prend pas en charge les commentaires de bloc traditionnels, mais certains compilateurs prennent en charge les directives de préprocesseur dans le style de C / C++ , permettant à un programmeur d'émuler des commentaires multilignes.br/>}