Программирование
Программи́рование — процесс и искусство создания компьютерных программ с помощью языков программирования[1][2].
Программирование сочетает в себе элементы искусства, науки, математики и инженерии.
В узком смысле слова, программирование рассматривается как кодирование — реализация одного или нескольких взаимосвязанных алгоритмов на некотором языке программирования. В более широком смысле, программирование — процесс создания программ, то есть разработка программного обеспечения.
Большая часть работы программиста связана с написанием исходного кода на одном из языков программирования.
Различные языки программирования поддерживают различные стили программирования (т. н. парадигмы программирования). Отчасти, искусство программирования состоит в том, чтобы выбрать один из языков, наиболее полно подходящий для решения имеющейся задачи. Разные языки требуют от программиста различного уровня внимания к деталям при реализации алгоритма, результатом чего часто бывает компромисс между простотой и производительностью (или между временем программиста и временем пользователя).
Единственный язык, напрямую выполняемый процессором — это машинный язык (также называемый машинным кодом). Изначально, все программисты прорабатывали каждую мелочь в машинном коде, но сейчас эта трудная работа уже не делается. Вместо этого, программисты пишут исходный код, и компьютер (используя компилятор, интерпретатор или ассемблер) транслирует его, в один или несколько этапов, уточняя все детали, в машинный код, готовый к исполнению на целевом процессоре. Даже если требуется полный низкоуровневый контроль над системой, программисты пишут на языке ассемблера, мнемонические инструкции которого преобразуются один к одному в соответствующие инструкции машинного языка целевого процессора.
В некоторых языках, вместо машинного кода генерируется интерпретируемый двоичный код "виртуальной машины", также называемый байт-кодом (byte-code). Такой подход применяется в Forth, Lisp, Java, Perl, Python а также в языках платформы Microsoft .NET.
Парадигмы программирования
правитьФункциональное программирование в соответствующем Вики-учебнике подробно изложено, поэтому поговорим об императивном программировании.
Для императивных языков программирования можно выделить 4 современных парадигмы программирования:
- Процедурное программирование (ПП)
- Объектно-ориентированное программирование (ООП)
- Компонентно-ориентированное программирование (КОП)
- Аспектно-ориентированное программирование (АОП)
Процедурное программирование
правитьВот пример процедурного кода, выводящего строку:
<?php
echo "Hello, world!";
?>
Вот пример объектно-ориентированного кода, который делает то же самое:
<?php
class helloWorld {
function myPrint() {
echo "Hello, world!";
}
}
$myHelloWorld = new helloWorld();
$myHelloWorld->myPrint();
?>
Методологии программирования
правитьСравнение языков программирования
править
В этой статье сравнивается более 50 языков программирования по основным свойствам синтаксиса.
Выражения
правитьВыражения в языках программирования в широком смысле могут быть подразделены на 4 типа по синтаксической структуре:
- префиксная запись
- Лисп (* (+ 2 3) (expt 4 5))
- инфиксная запись
- Фортран (2 + 3) * (4 ** 5)
- суффиксная, постфиксная или Обратная польская запись
- Форт 2 3 + 4 5 ** *
- запись выражений в математическом стиле
- Wolfram (2 + 3)(4^5) (* отметим неявный оператор умножения *)
Операторы
правитьКак правило в языках программирования имеются следующие соглашения по операторам:
- о разделителях операторов;
- о терминаторах операторов; и
- о продолжении строки
Разделитель операторов используется для демаркации границы между двумя отдельными операторами. Терминатор операторов используется для маркировки конца отдельного оператора. Языки, которые интерпретируют конец строки как конец оператора называются однострочными языками программирования.
«Продолжение строки» — это соглашение для однострочных языков о ситуациях, когда символ окончания строки может быть неправильно интерпретирован как окончание оператора. В таких языках «продолжение строки» позволяет оператору охватывать более одной строки.
Язык | Разделитель-терминатор операторов | Дополнительный разделитель[3] |
---|---|---|
ABAP | разделитель — точка '.' | |
Ада (Ada) | терминатор — точка с запятой ';' | |
Алгол (ALGOL) | разделитель — точка с запятой ';' | |
Алгол 68 (ALGOL 68) | разделитель — точка с запятой ';' и запятая ','[4] | |
APL | терминатор — новая строка | разделитель — ⋄ |
AppleScript | терминатор — новая строка | |
AutoHotkey | терминатор — новая строка | |
Бейсик (BASIC) | терминатор — новая строка | разделитель — двоеточие ':' |
Boo | терминатор — новая строка | |
Си (C) | терминатор — точка с запятой ';' | разделитель выражений — запятая ',' |
C++ | терминатор — точка с запятой ';' | разделитель выражений — запятая ',' |
C# | терминатор — точка с запятой ';' | |
Кобол (COBOL) | разделитель — пробел, иногда точка '.', имеется возможность разделять запятыми ',' и точками с запятыми ';'. | |
Cobra | терминатор — новая строка | |
CoffeeScript | терминатор — новая строка | |
D | терминатор — точка с запятой ';' | |
Eiffel | терминатор — новая строка | точка с запятой ';' |
Erlang | разделитель — двоеточие ':', терминатор — точка '.' | |
F# | терминатор — новая строка | точка с запятой ';' |
Фортран (Fortran) | терминатор — новая строка | точка с запятой ';' |
Форт (Forth) | терминатор определений слов — точка с запятой ';' | |
GFA BASIC | терминатор — новая строка | |
Go | разделитель — точка с запятой ';' (вставляется компилятором) | |
Haskell (в do-нотации) | разделитель — новая строка | |
Haskell (в do-нотации, при использовании скобок) | разделитель — точка с запятой ';' | |
Java | терминатор — точка с запятой ';' | |
JavaScript | разделитель — точка с запятой ';' (иногда неявно делится по новой строке) | |
Kotlin | разделитель — точка с запятой ';' (иногда неявно делится по новой строке) | |
Lua | разделитель — пробел (возможна точка с запятой ';') | |
Mathematica | разделитель — точка с запятой ';' | |
MATLAB | терминатор — новая строка | точка с запятой ';' или запятая ','[5] |
Object Pascal (Delphi) | разделитель — точка с запятой ';' | |
Objective-C | терминатор — точка с запятой ';' | |
OCaml | разделитель — точка с запятой ';' | |
Паскаль (Pascal) | разделитель — точка с запятой ';' | |
Perl | разделитель — точка с запятой ';' | |
Perl 6 | разделитель — точка с запятой ';' | |
PHP | терминатор — точка с запятой ';' | |
Pick Basic | терминатор — новая строка | разделитель — точка с запятой ';' |
PowerShell | терминатор — новая строка | разделитель — точка с запятой ';' |
Пролог (Prolog) | терминатор — точка '.' | |
Python | терминатор — новая строка | точка с запятой ';' |
Ruby | терминатор — новая строка | точка с запятой ';' |
Rust | терминатор операторов — точка с запятой ';' | разделитель выражений — запятая ',' |
Scala | терминатор — новая строка (возможна точка с запятой ';') | точка с запятой ';' |
Seed7 | разделитель — точка с запятой ';' (возможность использовать как терминатор) | |
Симула (Simula) | разделитель — точка с запятой ';' | |
S-Lang | разделитель — точка с запятой ';' | |
Smalltalk | разделитель — точка '.' | |
Standard ML | разделитель — точка с запятой ';' | |
Swift | разделитель — точка с запятой ';' (вставляется компилятором) | |
Visual Basic | терминатор — новая строка | разделитель — двоеточие ':' |
Visual Basic .NET | терминатор — новая строка | разделитель — двоеточие ':' |
Wolfram | разделитель — точка с запятой ';' | |
Xojo | терминатор — новая строка | |
Язык | Разделитель-терминатор операторов | Дополнительный разделитель[3] |
Продолжение строки
правитьОперация продолжения строки обычно происходит на стадии лексического анализа: как правило символ новой строки не добавляет токен в соотв. список, если было обнаружено продолжение строки.
- Символы пустого пространства — языки не требующие продолжения строки
- Ада — Строка обрывается точкой с запятой
- C# — Строка обрывается точкой с запятой
- JavaScript — Строка обрывается точкой с запятой (возможен неявный обрыв)
- Lua
- OCaml
- Амперсанд как последний символ строки
- Обратная косая черта как последний символ строки
- Bash[6] и др. оболочки Unix
- Препроцессор Си и Си++
- Mathematica and Wolfram Language
- Python[7]
- Ruby
- JavaScript — в текстовых константах, обрамлённых одной или двумя кавычками
- Гравис как последний символ строки
- Дефис как последний символ строки
- Подчёркивание как последний символ строки
- Многоточие (три точки, а не отдельный спец. символ)
- MATLAB: Многоточие не должно являться последним символом строки, однако все последующие символы игнорируются.[8] (По сути оно начинает комментарий, который продолжается и на следующей строке, в отличие от однострочного комментария, который продолжается лишь до окончания строки.)
- Запятая как последний символ строки
- Ruby (за запятой может быть комментарий)
- Левая скобка как последний символ строки
- Bat-файл: начало блока, обрамленного скобками разрешает продолжение строки[9]
- Ruby: Левая скобка — круглая, квадратная либо фигурная
- Оператор в качестве последнего объекта строки
- Ruby (за оператором может быть комментарий)
- Оператор в начале продолжающейся строки
- AutoHotkey: Любой оператор выражений за исключением ++ и --, а также точка или запятая[10]
- Обратная косая черта в начале продолжающейся строки
- Какая-либо форма однострочных комментариев как продолжение строки
- Turbo Assembler:
\
- m4:
dnl
- TeX:
%
- Позиция символа
- Фортран 77: Строка не являющаяся комментарием будет продолжением предыдущей строки не комментария в случае если на позиции 6 находится не пробел. Строки являющиеся комментариями не могут быть продолжены.
- Кобол: Текстовые константы могут быть продолжены, если не закончить их в предложении PICTURE символом
'
, а затем вставить символ-
в 7 м столбце (на той же позиции, на которой использовался символ*
для комментария) - TUTOR: Строки, начинающиеся символом табуляции (после требуемого контекстом отступа) продолжают предыдущую команду.
- Использование кавычек
Библиотеки
правитьИмпорт библиотеки — это способ добавить внешние (возможно откомпилированные) процедуры, программы или пакеты. Импорты классифицируют по уровню (модуль, пакет, класс, процедура,…) и по синтаксису (директивы, атрибуты,…)
- Импорт файлов
- ASP:
#include file="filename"
- AutoHotkey, AutoIt, Си, Си++:
#include "filename"
,#include <filename>
- Кобол:
COPY filename.
- Falcon:
load "filename"
- Фортран:
include 'filename'
- Lua:
require("filename")
- Mathematica и Wolfram:
Import["filename"]
- MATLAB:
addpath(directory)
[11] - Objective-C:
#import "filename"
,#import <filename>
- Perl:
require "filename";
- PHP:
include "filename";
,require "filename";
- Pick Basic:
include [filename] program
,#include [filename] program
- R:
source(""filename"")
- Rust:
include!( "filename");
- Импорт пакетов
- Ада:
with package
- Си, Си++:
#include filename
- Cobra:
use Package.Name
- D:
import package.module;
,import altname = package.module;
- Falcon:
load module
,load module.submodule
- Фортран 90+:
use module
,use module, only : identifier
- Go:
import altname "package/name"
- Haskell:
import Module
,import qualified Module as M
- Java, MATLAB, Kotlin:
import package.*
- JavaScript:
import altname from "modname";
,import "modname";
- Lua:
require("modname")
- Mathematica и Wolfram:
<<name
- Оберон (Oberon):
IMPORT module
- Objective-C:
@import module;
- Паскаль:
uses unit
- Perl:
use Module;
,use Module qw(import options);
- Python:
import module
,from module import *
- Rust:
mod modname;
,#[path = "filename"] mod altname;
,extern crate libname;
,extern crate libname as altname;
- R:
library("package")
- Scala:
import package._
,import package
- Swift:
import module
- Импорт классов
- Falcon:
import class
- Java, MATLAB, Kotlin:
import package.class
- JavaScript:
import class from "modname";
,import {class} from "modname";
,import {class as altname} from "modname";
- PHP:
use Namespace\ClassName;
,use Namespace\ClassName as AliasName;
- Python:
from module import class
- Scala:
import package.class
,import package.{ class1 => alternativeName, class2 }
,import package._
- Импорт процедур/функций
- D:
import package.module : symbol;
,import package.module : altsymbolname = symbol;
- Haskell:
import Module (function)
- JavaScript:
import function from "modname";
,import {function} from "modname";
,import {function as altname} from "modname";
- MATLAB:
import package.function
- Perl:
use Module ('symbol');
- PHP:
use function Namespace\function_name;
,use Namespace\function_name as function_alias_name;
- Python:
from module import function
- Rust:
use module::submodule::symbol;
,use module::submodule::{symbol1, symbol2};
,use module::submodule::symbol as altname;
- Scala:
import package.class.function
,import package.class.{ function => alternativeName, otherFunction }
- Импорт констант
- PHP:
use const Namespace\CONST_NAME;
Вышеуказанные операторы также могут быть разделены на 2 группы — являются ли они синтаксическим удобством (просто добавляют элементам краткое название, при этом элементы всё равно доступны по своему полному названию), либо нужны для доступа к коду (без этого оператора доступ к элементам невозможен даже при наличии полного имени).
- Синтаксическое удобство
- Необходимы для доступа к коду
- Go:
import altname "package/name"
- JavaScript:
import altname from "modname";
- Python:
import module
Блоки
правитьБлок представляет собой способ группировки двух или более отдельных операторов, выражений или иных элементов кода, которые должны представлять собой целое..
- Скобки (фигурные скобки)
{
…}
- Си, Си++, Objective-C, Go, Java, JavaScript/ECMAScript, C#, D, Perl, PHP (циклы
for
иloop
, передача блоков как аргументов), Rust, Scala, S-Lang, Swift, Windows PowerShell, Haskell (в do-нотации), AutoHotkey
см. также Curly bracket programming language
- Круглые скобки
(
…)
- Квадратные скобки
[
…]
- Smalltalk (блоки — объекты первого класса, т. н. замыкания)
begin
…end
do
…end
do
…done
- Bash (циклы
for
иwhile
), Visual Basic, Фортран, TUTOR (тело блока обязано быть с отступом), Visual Prolog
do
…end
- X …
end
(напр.if
…end
):
- Ruby (операторы
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
…)
- (progn …)
- (
do
…)
- Отступы
- Значимые (см. Off-side rule languages): Cobra, CoffeeScript, F#, Haskell (в do-нотации без скобок), Occam, Python
- Не имеют значения (см. Free-form languages): потомки Алгола (включая Си, Паскаль и Perl); языки семейства Лисп
- Другое
- Ада, Visual Basic, Seed7:
if
…end if
- Bash, sh, and ksh:
if
…fi
,do
…done
,case
…esac
; - Алгол 68:
begin
…end
,(
…)
,if
…fi
,do
…od
- Lua, Паскаль (язык программирования), Модула-2, Seed7:
repeat
…until
- Кобол:
IF
…END-IF
,PERFORM
…END-PERFORM
и т. д. для операторов; ….
для предложений. - Visual Basic .NET:
If
…End If
,For
…Next
,Do
…Loop
- Small Basic:
If
…EndIf
,For
…EndFor
,While
…EndWhile
Комментарии
правитьКомментарии подразделяются по:
- стилю (однострочные/многострочные)
- правилам разбора/трансляции (ингорируются/интерполируются/сохраняются в памяти)
- рекурсивности (вкладываемые/не-вкладываемые)
- использованию (для документации (см. docstrings)/отбрасываемые/другие)
Однострочные комментарии
правитьКак правило эти комментарии простираются до символа перевода строки, и используют оговоренную последовательность токенов для индикации начала комментария.
Примеры:
Многострочные комментарии
правитьКак правило многострочные комментарии используют оговоренные последовательности символов для маркировки начала и конца комментария. В этом контексте символы пустого места или перевода строки игнорируются.
Примеры:
Символ | Языки |
---|---|
comment ~ ;
|
Алгол 60, Симула |
¢ ~ ¢ ,# ~ # , co ~ co ,comment ~ comment
|
Алгол 68[14][15] |
/* ~ */
|
ActionScript, AutoHotkey, Си, Си++, C#, D[16] Go, Java, JavaScript, Kotlin, Objective-C, PHP, ПЛ/1, Rexx, Rust (могут быть вложенными), Scala (могут быть вложенными), SAS, SASS, SQL, Swift, Visual Prolog, CSS |
#cs ~ #ce
|
AutoIt[17] |
/+ ~ +/
|
D (могут быть вложенными)[16] |
/# ~ #/
|
Cobra (могут быть вложенными) |
<# ~ #>
|
Powershell |
=begin ~ =cut
|
Perl |
#`( ~ )
|
Perl6 (можно использовать любые скобки — (), <>, {}, [], зеркальные пары символов Юникода, а также символы Юникода со свойствами Ps/Pe/Pi/Pf) |
=begin ~ =end
|
Ruby |
#<TAG> ~ #</TAG> , #stop ~ EOF ,#iffalse ~ #endif , #ifntrue ~ #endif ,#if false ~ #endif , #if !true ~ #endif
|
S-Lang[18] |
{- ~ -}
|
Haskell (могут быть вложенными) |
(* ~ *)
|
ML, Mathematica, Object Pascal (Delphi), Паскаль, Seed7, Applescript, OCaml (могут быть вложенными), Standard ML (могут быть вложенными), Maple, Newspeak, F# |
{ ~ }
|
Object Pascal (Delphi), Паскаль |
|# ~ #|
|
Curl |
%{ ~ %}
|
MATLAB[13] (символы должны быть в отдельной строке) |
#| ~ |#
|
Лисп, Scheme, Racket (во всех трёх могут быть вложенными). |
--[[ ~ ]] ,--[=[ ~ ]=]
|
Lua (первая форма может включаться во вторую) |
" ~ "
|
Smalltalk |
(comment ~ )
|
Clojure |
Уникальные варианты
правитьФортран
править- Решающее значение в Фортранe 66/77 имеют отступы. Основной оператор находится в столбцах с 7 по 72. Любой не пробел в столбце 6 указывает на то, что строка является продолжением предыдущей строки. Символ '
C
' в первом столбце указывает на то, что строка является комментарием . Столбцы с 1-го по 5-й могут содержать число, являющееся меткой. Столбцы с 73-го по 80-й игнорируются и могут быть комментарием; ранее в этих местах наносился номер перфокарты, что позволяло отсортировать их в случае падения колоды. В Фортране 90 правило отступов было упразднено и были добавлены однострочные комментарии с использованием символа!
.
Кобол
править- Отступы значимы в формате фиксированного кода. Содержание столбцов с 1-го по 6-й и после 73-го игнорируется. Если в 7-м столбце содержался символ
*
или/
строка являлась комментарием. До версии Кобол 2002 если строка содержала в 7-м столбце символD
илиd
— это обозначало отладочную строку, которая могла игнорироваться в зависимости от режима компилирования.
Cobra
править- Cobra поддерживает многострочные комментарии «
/#
…#/
» похожие на встречающиеся в Си-подобных языках «/*
…*/
», однако с некоторыми отличиями. Символ#
используется в однострочной форме комментариев «#
…» и многострочные комментарии могут быть вложенными, что удобно при комментировании больших кусков кода.
Curl
править- Curl поддерживает многострочные комментарии при помощи пользовательских тегов
|foo# ... #foo|
.
Lua
править- Как и в текстовых константах, в многострочном комментарии может использоваться произвольное число символов
=
, при условии, что такое же их число используется и в закрывающей последовательности; это позволяет реализовать множественное вложение комментариев и текстовых констант если все они используют различное количество знаков=
в обрамляющих тегах:--[[comment --[=[ nested comment ]=] ]]
. Lua игнорирует первый перенос строки, который следует сразу за открывающим тегом.
Perl 5
править- Многострочные комментарии в Perl 5 считаются частью документации и именуются «Простая старая документация» (англ. Plain Old Documentation — POD). Технически в Perl 5 нет соглашения о многострочных комментариях, но POD повсеместно используются в этом качестве.
Perl 6
править- В Perl 6 для многострочных комментариев используется конструкция
#`(...)
.[19] Фактически Perl 6 позволяет использовать любые пары скобок после#`
(напр.#`(...)
,#`[...]
,#`{...}
,#`<...>
, и даже более сложные#`{{...}}
являются полноценными комментариями). Скобки также можно вкладывать внутри комментариев (напр. в конструкции#`{ a { b } c }
комментарий продолжается до последней закрывающей скобки).
PHP
править- PHP поддеживает стандартные комментарии в стиле C/C++ а также комментарии в стиле Perl.
Python
править- Иногда для комментирования строк кода используются три двойных кавычки
"""
. На самом деле они создают не комментарий, а пустой оператор с текстовой константой, который Python игнорирует (за исключением случая, когда текстовая константа — первый оператор в теле модуля, класса или функции; см docstring)
Ruby
править- Также как Python и Perl, Ruby не имеет определённого синтаксиса многострочных комментариев. Однако в качестве комментариев, как и в Perl, могут использоваться блоки документации, поскольку интерпретатор игнорирует их.
S-Lang
править- Интерпретатор игнорирует регион кода обрамленный
#<tag>
и#</tag>
. Имя тега может быть любой алфавитно-цифровой последовательностью символов и указывать на способ обработки кода. Например,#<latex>
может указывать на документацию в формате LaTeX.
Scheme and Racket
править- Следующий полный синтаксический элемент (s-выражение) может быть откомментирован при помощи
#;
.
ABAP
править- ABAP поддерживает два типа комментариев. Если первый символ строки (вкл. отступ) является звёздочкой (
*
) вся строка считается комментарием, а кавычками ("
) начинается комментарий до конца строки. Комментарии в ABAP невозможны между операторамиEXEC SQL
иENDEXEC
поскольку в SQL имеется другое применение этим символам. В большинстве диалектов SQL вместо этого используется двойной дефис (--
).
Эзотерические языки программирования
править- Большинство эзотерических языков программирования следует соглашению о том, что любой не исполняющийся (напр. Befunge) или не имеющий значения (напр. Brainfuck) кусок кода считается комментарием.
Сравнение комментариев
правитьСуществует большое разнообразие способов объявления комментариев в исходном коде.
BlockComment
курсивом указывает многострочное тело комментария.
InlineComment
курсивом указывает однострочное тело комментария.
Язык | Однострочный комментарий | Многострочный комментарий |
---|---|---|
Ада, Eiffel, Euphoria, Occam, SPARK, ANSI SQL, и VHDL | -- InlineComment
|
|
Алгол 60 (ALGOL 60) | comment BlockComment;
| |
Алгол 68 (ALGOL 68) | ¢ BlockComment ¢
| |
APL | ⍝ InlineComment
|
|
AppleScript | -- InlineComment
|
(* BlockComment *)
|
Язык ассемблера (разн.) | ; InlineComment только один пример (в большинстве ассемблеров есть только комментарии-строки)
|
|
AutoHotkey | ; InlineComment
|
/* BlockComment */
|
AWK, Bash, Bourne shell, C shell, Maple, R, Tcl, и Windows PowerShell | # InlineComment
|
<# BlockComment #>
|
Бейсик (BASIC) разл. диалекты: | 'InlineComment (not all dialects)
|
|
Си (K&R, ANSI/C89/C90), CHILL, ПЛ/1 (PL/I) и REXX | /* BlockComment */
| |
C (C99), C++, Go и JavaScript | // InlineComment
|
/* BlockComment */
|
C# | // InlineComment /// InlineComment (XML комментарий-документация)
|
/* BlockComment */ /** BlockComment */ (XML комментарий-документация)
|
Кобол (COBOL) от I до Кобол 85 | * InlineComment (* в столбце 7)
|
|
Кобол 2002 | *> InlineComment
|
|
Curl | || InlineComment
|
|# BlockComment #|
|
Cobra | # InlineComment
|
/# BlockComment #/ (вкладываемые)
|
D | // InlineComment /// Documentation InlineComment (en:ddoc комментарии)
|
/* BlockComment */ /** Documentation BlockComment */ (en:ddoc комментарии)
|
DCL | $! InlineComment
|
|
ECMAScript (JavaScript, ActionScript и т. д.) | // InlineComment
|
/* BlockComment */
|
Форт (Forth) | \ InlineComment
|
( BlockComment ) (одно и многострочные)
|
Фортран от I Фортран77 | C InlineComment (C в первом столбце)
|
|
Фортран 90 | ! InlineComment
|
|
Haskell | -- InlineComment
|
{- BlockComment -}
|
Java | // InlineComment
|
/* BlockComment */
|
Лисп (Lisp) и Scheme | ; InlineComment
|
#| BlockComment |#
|
Lua | -- InlineComment
|
--[==[ BlockComment]==] (варьируемое количество знаков =)
|
Maple | # InlineComment
|
(* BlockComment *)
|
Mathematica | (* BlockComment *)
| |
Matlab | % InlineComment
|
%{ Отметьте: оба символа процент-скобка должны быть единственными не пустыми символами (пробелами, табуляциями и др.) на своих строках. |
Object Pascal (Delphi) | // InlineComment
|
(* BlockComment *) { BlockComment }
|
OCaml | (* BlockComment (* вкладываемые *) *)
| |
Паскаль (Pascal), Модула-2, Модула-3 (Modula-2,3), Оберон (Oberon) и ML: | (* BlockComment *)
| |
Perl и Ruby | # InlineComment
|
=begin (=end в Ruby) (POD комментарий-документация)
|
Perl 6 | # InlineComment
|
#`{
|
PHP | # InlineComment // InlineComment
|
/* BlockComment */ /** документация BlockComment */ (PHP комментарий-документация)
|
PILOT | R:InlineComment
|
|
PLZ/SYS | ! BlockComment !
| |
PL/SQL and TSQL | -- InlineComment
|
/* BlockComment */
|
Python | # InlineComment
|
''' BlockComment ''' (Комментарий-документация если это первая строка модуля, класса, метода или функции) |
Rust | // InlineComment
|
/* BlockComment */ (вкладываемый)
|
SAS | * BlockComment; /* BlockComment */
| |
Seed7 | # InlineComment
|
(* BlockComment *)
|
Симула (Simula) | comment BlockComment; ! BlockComment;
| |
Smalltalk | "BlockComment"
| |
Smarty | {* BlockComment *}
| |
Standard ML | (* BlockComment *)
| |
TeX, LaTeX, PostScript, Erlang, Elixir and S-Lang | % InlineComment
|
|
Texinfo | @c InlineComment
|
|
TUTOR | * InlineComment command $$ InlineComment
|
|
Visual Basic | ' InlineComment Rem InlineComment
|
|
Visual Basic .NET | ' InlineComment
|
|
Visual Prolog | % InlineComment
|
/* BlockComment */
|
Wolfram | (* BlockComment *)
| |
Xojo | ' InlineComment // InlineComment rem InlineComment
|
Примеры функций
правитьabs() — математическая функция из библиотеки stdlib.h для вычисления модуля числа. Принимает и возвращает значения типа int.
labs() — тоже вычисляет модуль числа, но принимает и возвращает значения типа long.
Пример
править# include <stdlib.h>
# include <stdio.h>
int main()
{
int distance, x1, x2;
scanf("%d%d", &x1, &x2);
distance = abs(x1 - x2);
printf("Расстояние: %d", distance);
return 0;
}
См. также
править- Аспектно-ориентированное программирование
- Объектно-ориентированное программирование
- Компонентно-ориентированное программирование
- Основы функционального программирования
- Операционные системы
- Языки программирования в школе
- Московская олимпиада по информатике - 2005
- Все учебники по языкам программирования
- Метаобъектный компилятор
Литература
правитьПримечания
править- ↑ нет АИ
- ↑ см.также wikt:программирование
- ↑ а б для нескольких операторов на одной строке
- ↑ Три типа предложений, каждое разделяет части по-разному:
- последовательное предложение использует токен продолжения (точка с запятой ';'): begin a; b; c end — элементы исполняются по очереди.
- непоследовательное предложение использует токен и-также (запятая «,»): begin a, b, c end — очередность исполнения определяется оптимизатором компилятора..
- параллельное предложение использует токен и-также (запятая «,»): par begin a, b, c end — элементы необходимо исполнять в параллельных потоках.
- ↑ точка с запятой — спрятать результат оператора, запятая — показать результат
- ↑ Bash Reference Manual, 3.1.2.1 Escape Character
- ↑ Python Documentation, 2. Lexical analysis: 2.1.5. Explicit line joining
- ↑ Mathworks.com Шаблон:Webarchive
- ↑ https://ss64.com/nt/syntax-brackets.html
- ↑ https://autohotkey.com/docs/Scripts.htm#continuation
- ↑ Чтобы М-файл (код MATLAB) был доступен по имени, он должен находится в текущем каталоге либо, либо каталоге из пути поиска.
- ↑ https://nim-lang.org/docs/manual.html#lexical-analysis-comments
- ↑ а б Mathworks.com Проверено 25 июня 2013 г.
- ↑ Algol68_revised_report-AB.pdf стр. 61-62, в оригинале стр. 121-122 Проверено 27 мая 2014 г.
- ↑ HTML Пересмотренный доклад о языке Algol68 Проверено 27 мая 2014 г. Архивировано из первоисточника 17 марта 2013.
- ↑ а б DLang.org, Lexical Проверено 27 мая 2014 г.
- ↑ AutoItScript.com Keyword Reference, #comments-start Проверено 27 мая 2014 г.
- ↑ slang-2.2.4/src/slprepr.c - line 43 to 113 Проверено 28 мая 2014 г.
- ↑ Документация Perl 6 (синтаксис). docs.perl6.org. Проверено 2017-04-05 г.
- ↑ Perl 6 POD Comments
- ↑ Perl 6 POD (Abbreviated Blocks)