В этом сравнении языков программирования сравниваются особенности синтаксиса (формата) более 50 языков программирования.
Выражения языка программирования можно условно разделить на четыре синтаксические структуры:
(* (+ 2 3) (expt 4 5))
(2 + 3) * (4 ** 5)
2 3 + 4 5 ** *
(2 + 3)(45) $$ note implicit multiply operator
Когда в языке программирования есть операторы , в них обычно есть соглашения для:
Разделитель операторов разграничивает два отдельных оператора. Терминатор операторов определяет конец отдельного оператора. Языки, которые интерпретируют конец строки как конец оператора, называются «строчно-ориентированными» языками.
"Продолжение строки" — это соглашение в языках, ориентированных на строки, где символ новой строки потенциально может быть неверно истолкован как терминатор оператора. В таких языках он позволяет одному оператору охватывать более одной строки.
Продолжение строки обычно выполняется в рамках лексического анализа : новая строка обычно приводит к добавлению токена в поток токенов, если только не обнаружено продолжение строки.
\
dnl
%
'
, а затем вставив a -
в столбец 7 (та же позиция, что и *
для комментария).Импорт библиотеки — это способ чтения внешних, возможно скомпилированных, процедур, программ или пакетов. Импорт может быть классифицирован по уровню (модуль, пакет, класс, процедура,...) и по синтаксису (имя директивы, атрибуты, ... )
addpath(directory)
МАТЛАБ [10]COPY filename.
КОБОЛ:-include("filename").
Пролог#include file="filename"
АСП#include "filename"
, AutoHotkey , AutoIt , C , C++#include <filename>
AutoHotkey , AutoIt , C , C++#import "filename"
, Objective-C#import <filename>
Objective-CImport["filename"]
Mathematica , Язык Вольфрамаinclude 'filename'
Фортранinclude "filename";
PHPinclude [filename] program
, Выберите Базовый#include [filename] program
Выберите базовый вариантinclude!("filename");
Ржавчинаload "filename"
Рубинload %filename
Красныйrequire('filename')
Луаrequire "filename";
Перл , PHPrequire "filename"
Рубинsource(""filename"")
Р@import("filename");
Зиг#include filename
С , С++#[path = "filename"] mod altname;
, Ржавчина@import module;
Objective-C<<name
Mathematica , Язык Вольфрама:-use_module(module).
Пролог :from module import *
Питонextern crate libname;
, Ржавчинаextern crate libname as altname;
Ржавчинаmod modname;
, Ржавчинаlibrary("package")
Р :IMPORT module
Оберонimport altname "package/name"
Идти :import package.module;
, Дimport altname = package.module;
Дimport Module
, Хаскеллimport qualified Module as M
Хаскеллimport package.*
Java , MATLAB , Котлинimport "modname";
JavaScript :import altname from "modname";
, JavaScript :import package
Скалаimport package._
, Скалаimport module
Быстрыйimport module
V (Вланг)import module
, Питонrequire "gem"
, Рубиuse module
, Фортран 90 +use module, only : identifier
Фортран 90 +use Module;
, Перлuse Module qw(import options);
Перлuse Package.Name
Кобраuses unit
Паскальwith package
Ада@import("pkgname");
Зигfrom module import Class
Питонimport package.class
Java , MATLAB , Котлинimport class from "modname";
, JavaScriptimport {class} from "modname";
, JavaScriptimport {class as altname} from "modname";
JavaScriptimport package.class
, Скалаimport package.{ class1 => alternativeName, class2 }
, Скалаimport package._
Скалаuse Namespace\ClassName;
, PHPuse Namespace\ClassName as AliasName;
PHPfrom module import function
Питон :import package.module : symbol;
, Д :import package.module : altsymbolname = symbol;
Д :import Module (function)
Хаскелл :import function from "modname";
, JavaScript :import {function} from "modname";
, JavaScript :import {function as altname} from "modname";
JavaScript :import package.function
МАТЛАБ :import package.class.function
, Скала :import package.class.{ function => alternativeName, otherFunction }
Скала :use Module ('symbol');
Перл :use function Namespace\function_name;
, PHP :use Namespace\function_name as function_alias_name;
PHP-код :use module::submodule::symbol;
, Ржавчина :use module::submodule::{symbol1, symbol2};
, Ржавчина :use module::submodule::symbol as altname;
Ржавчина :use const Namespace\CONST_NAME;
PHPВышеуказанные операторы также можно классифицировать по тому, являются ли они синтаксическим удобством (позволяющим ссылаться на вещи по более короткому имени, но на них все равно можно ссылаться по некоторому полностью квалифицированному имени без импорта) или они действительно необходимы для доступа к коду (без чего невозможно получить доступ к коду, даже с полностью квалифицированными именами).
import package.*
Яваimport package.class
Яваopen module
OCamlimport altname "package/name"
Идтиimport altname from "modname";
JavaScriptimport module
ПитонБлок — это обозначение группы из двух или более операторов, выражений или других единиц кода, которые связаны таким образом, что составляют единое целое.
{
...}
for
и loop
передача блока в качестве аргумента), R , Rust , Scala , S-Lang , Swift , PowerShell , Haskell (в do-нотации), AutoHotkey , Zig(
...)
[
...]
begin
...end
for
и , OCaml , SCL , Simula , Erlang ).do/while
do/until
do
...end
do
...done
for
& while
циклы), F# (подробный синтаксис) [11] Visual Basic , Fortran , TUTOR (с обязательным отступом тела блока), Visual Prologdo
...end
for
цикл), Seed7 (заключает тела циклов между do
и end
)end
(например if
... end
):if
, while
, until
, def
, class
, module
операторы), OCaml ( for
& while
циклы), MATLAB ( if
& switch
условные операторы, for
& while
циклы, try
предложения package
, , classdef
, properties
, methods
, events
, & function
блоки), Lua ( then
/ else
& function
)begin
...)do
...)if
...end if
:If
... :EndIf
или :If
...:End
if
... fi
, do
... done
, case
... esac
;begin
... end
, (
... )
, if
... fi
, do
...od
repeat
...until
IF
... END-IF
, PERFORM
... END-PERFORM
, и т. д. для утверждений; ... .
для предложений.If
... End If
, For
... Next
, Do
...Loop
If
... EndIf
, For
... EndFor
, While
...EndWhile
Комментарии можно классифицировать по:
Встроенные комментарии обычно используют символ новой строки для обозначения конца комментария и произвольный разделитель или последовательность токенов для обозначения начала комментария.
Примеры:
Блочные комментарии — это, как правило, те, которые используют разделитель для обозначения начала комментария и другой разделитель для обозначения конца комментария. В этом контексте пробелы и символы новой строки не считаются разделителями. В примерах символ ~ представляет комментарий; а окружающие его символы интерпретируются интерпретаторами/компиляторами как разделители.
Примеры:
C
' в столбце 1 указывает, что вся эта строка является комментарием. Столбцы с 1 по 5 могут содержать число, которое служит меткой. Столбцы с 73 по 80 игнорируются и могут использоваться для комментариев; во времена перфокарт эти столбцы часто содержали порядковый номер, чтобы колоду карт можно было отсортировать в правильном порядке, если кто-то случайно уронил карты. Fortran 90 устранил необходимость в правиле отступа и добавил встроенные комментарии, используя !
символ в качестве разделителя комментариев.*
находится /
в столбце 7, то эта строка является комментарием. До COBOL 2002, если D
или d
находился в столбце 7, это определяло бы «строку отладки», которая игнорировалась бы, если бы компилятору не было указано скомпилировать ее./#
... #/
", что похоже на " /*
... */
", часто встречающийся в языках на основе C, но с двумя отличиями. #
Символ повторно используется из однострочной формы комментария " #
...", а блочные комментарии могут быть вложенными, что удобно для комментирования больших блоков кода.|foo# ... #foo|
.--[[comment --[=[ nested comment ]=] ]]
Lua отбрасывает первую новую строку (если она есть), которая следует непосредственно за открывающим тегом.~S
(который предотвращает интерполяцию строк) к строке в тройных кавычках, что приведет к окончательной конструкции ~S""" ... """
. Кроме того, Elixir поддерживает ограниченную форму блочных комментариев как официальную функцию языка, но, как и в Perl, эта конструкция полностью предназначена для написания документации. В отличие от Perl, ее нельзя использовать в качестве обходного пути, поскольку она ограничена определенными частями кода и выдает ошибки или даже подавляет функции, если используется в другом месте. [22]#`(...)
для обозначения блочных комментариев. [23] Raku фактически позволяет использовать любые «правые» и «левые» парные скобки после #`
(т. е #`(...)
. #`[...]
, #`{...}
, , #`<...>
, и даже более сложные #`{{...}}
являются допустимыми блочными комментариями). Скобки также могут быть вложены внутрь комментариев (т. е. #`{ a { b } c }
идут к последней закрывающей скобке).=begin
строке и закрывается на =end
строке.#<tag>
и , #</tag>
игнорируется интерпретатором. Имя тега может быть любой последовательностью буквенно-цифровых символов, которая может использоваться для указания того, как следует расшифровывать заключенный в нем блок. Например, #<latex>
может указывать на начало блока документации в формате LaTeX.#;
.ABAP поддерживает два разных вида комментариев. Если первый символ строки, включая отступ, является звездочкой ( *
), то вся строка считается комментарием, в то время как одинарная двойная кавычка ( "
) начинает встроенный комментарий, который действует до конца строки. Комментарии ABAP невозможны между операторами EXEC SQL
, и потому что в собственном SQL есть другие способы использования этих символов. В большинстве диалектов SQL вместо этого можно использовать ENDEXEC
двойное тире ( ).--
Существует множество стилей синтаксиса для объявления комментариев в исходном коде. BlockComment
Курсив здесь используется для обозначения стиля блочных комментариев. InlineComment
Курсив здесь используется для обозначения стиля встроенных комментариев.
/* ... */
, для их имитации можно использовать директивы компилятора, как в VB.NET._
может использоваться для расширения однострочного комментария на следующую строку без необходимости снова набирать '
or REM
. Это можно сделать до 24 раз подряд.