D
- Дата создания:
- 1999
- Создан под влиянием:
- Парадигма:
- Типизация:
- Принятые расширения файлов:
- .d
- Реализации и версии (свернуть все | развернуть все):
D — язык программирования общего назначения, предназначенный для прикладного и системного программирования. Он является языком высокого уровня, но сохраняет возможности прямого взаимодействия с программным интерфейсом операционной системы и с оборудованием. D предназначен для написания средних и крупных систем с миллионами строк исходного кода, для ведения командной разработки. Язык D имеет C-подобный синтаксис, он лёгок в изучении, предоставляет программисту многие удобные возможности, а также пригоден для проведения агрессивной оптимизации кода компилятором.
D был создан Уолтером Брайтом в 1999. Изначально он задумывался как улучшенный C++, но не стал одним из его клонов. Первая версия языка D1 реализовала поддержку императивного и объектно-ориентированного программирования, а также метапрограммирования, как и C++. Разработка второй версия, D2, началась в 2007 году; в ней акцент сместился на поддержку новых стилей, функционального и многопоточного. В 2010 году D2 стала стабильной версией языка, и именно ее обычно подразумевают под термином “D”.
Две основные библиотеки языка — Phobos (официальная) и Tango (разрабатываемая сообществом).
Элементы синтаксиса:
Комментарий до конца строки | // |
---|---|
Комментарии, которые могут быть вложенными | /* ... */ |
Комментарии, которые не могут быть вложенными | /+ ... +/ |
Регистрозависимость | да |
Регулярное выражение идентификатора переменной | [_a-zA-Z][_a-zA-Z0-9]* |
Регулярное выражение идентификатора функции | [_a-zA-Z][_a-zA-Z0-9]* |
Присваивание значения переменной | <varname> = <value> |
Объявление переменной | <type> <varname> |
Объявление переменной с присваиванием значения | <type> <varname> = <value> |
Группировка выражений | ( ... ) |
Блок | { ... } |
Равенство | == |
Неравенство | != |
Сравнение | < > <= >= |
Определение функции | returntype f (type1 p1, type2 p2, ... ) { ... } |
Вызов функции | f(a, b, ...) |
Вызов функции без параметров | f() |
Последовательность | ; |
Если - то | if (condition) ... |
Если - то - иначе | if (condition) ... else ... |
Цикл с предусловием | while (condition) ... |
Цикл с постусловием | do ... while (!condition) |
Цикл for - next для диапазона целых чисел с инкрементом на 1 | for (int i = 1; i <= 10; i++) ... |
Цикл for - next для диапазона целых чисел с декрементом на 1 | for (int i = 10; i > 0; i--) ... |
Ссылки:
Примеры:
Hello, World!:
Пример для версий GDC 0.24Функция writef
примерно эквивалентна printf
в C++ и выводит на печать строку определенного формата.
module hello;
import std.stdio;
int main()
{
writefln( "Hello, World!" );
return 0;
}
Факториал:
Пример для версий GDC 0.24Используется рекурсивное определение факториала.
module factorial;
import std.stdio;
ulong recursive(ulong x)
{
return (x == 0 ? 1 : x * recursive( x - 1 ));
}
int main()
{
for (int i = 0; i < 17; ++i)
{
writefln("%s! = %s", i, recursive(i));
}
return 0;
}
Факториал:
Пример для версий GDC 0.24Используется итеративное определение факториала. Отметим использование цикла foreach
, в котором переменная цикла принимает все значения от нижней границы включительно до верхней исключительно.
module factorial;
import std.stdio;
int main()
{ ulong fact = 1;
foreach (ulong i; 1..18)
{ writefln("%s! = %s", i-1, fact);
fact *= i;
}
return 0;
}
Числа Фибоначчи:
Пример для версий GDC 0.24Используется рекурсивное определение чисел Фибоначчи.
module fibonacci;
import std.stdio;
ulong recursive(ulong x)
{
return x <= 2 ? 1 : recursive( x - 2 ) + recursive( x - 1 );
}
int main()
{
for (uint i = 1; i < 17; i++)
{
writef("%s, ", recursive(i));
}
writefln("%s", "...");
return 0;
}
Числа Фибоначчи:
Пример для версий GDC 0.24Используется итеративное определение чисел Фибоначчи.
module fibonacci;
import std.stdio;
ulong iterative(ulong x)
{
ulong prev1 = 1L;
ulong prev2 = 1L;
ulong result = x <= 2 ? 1L : 0L;
for ( ulong i = 3; i <= x; ++i )
{
result = prev1 + prev2;
prev1 = prev2;
prev2 = result;
}
return result;
}
int main()
{
for (uint i = 1; i < 17; i++)
{
writef("%s, ", iterative(i));
}
writefln("%s", "...");
return 0;
}
Квадратное уравнение:
Пример для версий GDC 0.24import std.c.stdio;
import std.stdio;
import std.math;
int main() {
int A, B, C;
writef("A = ");
scanf("%d", & A);
if (A==0)
{ writefln("Not a quadratic equation.");
return 0;
}
writef("B = ");
scanf("%d", & B);
writef("C = ");
scanf("%d", & C);
A*=2;
float D = B*B-2*A*C;
if (D == 0)
{ writefln("x = %f\n",-B*1.0/A);
return 0;
}
if (D>0)
writefln("x1 = %f\nx2 = %f",(-B+sqrt(D))/A,(-B-sqrt(D))/A);
else
writefln("x1 = (%f, %f)\nx2 = (%f, %f)",-B*1.0/A,sqrt(-D)/A,-B*1.0/A,-sqrt(-D)/A);
return 0;
}
CamelCase:
Пример для версий D 2.009Первая строка читает строку из стандартного потока ввода и переводит ее в нижний регистр. Вторая — заменяет все символы, не являющиеся буквами латинского алфавита, на пробелы (последний параметр — атрибуты замены, “g” означает, что замена выполняется во всей строке, а не только в первом подходящем месте). Третья — использует стандартную функцию capwords
для того, чтобы убрать пробелы из начала и конца строки, заменить последовательности нескольких пробелов на один пробел и перевести первую букву каждого слова в верхний регистр. Наконец, все оставшиеся пробелы удаляются из строки, и результат выводится на печать.
import std.stdio;
import std.string;
import std.regexp;
void main() {
string text = tolower(readln());
text = sub(text,"[^a-z]"," ","g");
text = capwords(text);
text = sub(text," ","","g");
writeln(text);
}
Комментарии
]]>blog comments powered by Disqus
]]>