Глава 2 закончена

This commit is contained in:
Alexander Zhirov 2023-01-23 00:14:13 +03:00
parent 42b2af19c0
commit 09dc3df444
18 changed files with 261 additions and 1 deletions

View file

@ -0,0 +1,20 @@
import std.stdio;
void main()
{
auto a = r"Строка с \ и " ~ `"` ~ " внутри.";
auto b = r"c:\games\Sudoku.exe";
auto c = r"ab\n";
auto d = q"[Какая-то строка с "кавычками", `обратными апострофами` и [квадратными скобками]]";
auto e = q"/Просто строка/";
auto f = q"EOS
This
is a multi-line
heredoc string
EOS";
auto g = q{ foo(q{hello}); };
// auto h = q{ № };
// auto i = q{ __EOF__ };
}

View file

@ -0,0 +1,19 @@
import std.stdio;
void main()
{
writeln(typeid(typeof("Hello, world!"))); // immutable(char)[]
immutable(char)[] str = "One";
str = "Two";
writeln(typeid(typeof(str))); // immutable(char)[]
immutable(char)[3] a = "Hi!";
immutable(char)[] b = a;
writeln(a.length, " ", b.length); // 3 3
wstring x = "Здрав­ст­вуй, ши­ро­кий мир!";
writeln(typeid(typeof(x))); // immutable(wchar)[]
dstring y = "Здрав­ст­вуй, еще бо­лее ши­ро­кий мир!";
writeln(typeid(typeof(y))); // immutable(dchar)[]
}

View file

@ -0,0 +1,8 @@
import std.stdio;
void main()
{
auto crlf = "\r\n";
auto a = "В этой стро­ке есть \"двой­ные ка­выч­ки\", а так­же
пе­ре­вод стро­ки, да­же два" ~ "\n";
}

View file

@ -0,0 +1,21 @@
import std.stdio;
void main()
{
auto somePrimes = [ 2u, 3, 5, 7, 11, 13 ];
writeln(somePrimes);
auto someDoubles = [ 1.5, 3, 4.5 ];
writeln(someDoubles);
auto constants = [ 2.71, 3.14, 6.023e22 ];
writeln(constants);
constants[0] = 2.21953167;
writeln(constants);
auto salutations = [ "привет", "здравствуйте", "здорово" ];
writeln(salutations);
salutations[2] = "Да здравствует Цезарь";
writeln(salutations);
auto famousNamedConstants = [ "пи" : 3.14, "e" : 2.71, "константа дивана" : 2.22 ];
writeln(famousNamedConstants);
}

View file

@ -0,0 +1,20 @@
import std.stdio;
void main()
{
auto f = function double(int x) { return x / 10.; };
auto a = f(5);
assert(a == 0.5);
double function(int) e = function double(int x) { return x / 10.; };
auto b = e(5);
assert(b == 0.5);
int h = 2;
auto g = delegate double(int x) { return h * x / 10.; };
auto i = g(5);
assert(i == 1);
h = 3;
auto j = g(5);
assert(j == 1.5);
}

View file

@ -0,0 +1,15 @@
import std.stdio;
void main()
{
int a = -1; // То есть 0xFFFF_FFFF
int b = a << 1;
assert(b == -2); // 0xFFFF_FFFE
writeln("a = ", a, "; b = ", b, ';');
int c = a >> 1;
assert(c == -1); // 0xFFFF_FFFF
writeln("a = ", a, "; c = ", c, ';');
int d = a >>> 1;
assert(d == +2147483647); // 0x7FFF_FFFF
writeln("a = ", a, "; d = ", d, ';');
}

View file

@ -0,0 +1,20 @@
import std.stdio;
void main()
{
double[string] table = [
"one": 1.0,
"two": 2.0
];
writeln(table);
auto p = "three" in table;
if (p)
{
++*p;
}
else
{
table["three"] = 3.0;
}
writeln(table);
}

View file

@ -0,0 +1,10 @@
import std.stdio;
void main()
{
auto a = "ка­кая-то стро­ка";
auto b = a; // a и b ссы­ла­ют­ся на один и тот же мас­сив
a is b && writeln("Ага, это действительно одно и то же.");
auto c = "какая-то (другая) строка";
a is c || writeln("Действительно... не одно и то же.");
}

View file

@ -0,0 +1,7 @@
import std.stdio;
void main()
{
string line;
line == "#\n" && writeln("Успешно принята строка #. ");
}

View file

@ -0,0 +1,7 @@
import std.stdio;
void main()
{
string line;
line.length > 0 || line = "\n";
}

View file

@ -0,0 +1,9 @@
import std.stdio;
void main()
{
int x = 5, y = 5;
bool which = true;
(which ? x : y) += 5;
assert(x == 10);
}

View file

@ -0,0 +1,8 @@
import std.stdio;
void main()
{
int a = 5;
int b = 10;
int c = (a = b, b = 7, 8);
}

View file

@ -0,0 +1,22 @@
import std.stdio;
void main()
{
bool
a = is(int[]), // True, int[] до­пус­ти­мый тип
b = is(int[5]), // True, int[5] так­же до­пус­ти­мый тип
c = is(int[-3]), // False, раз­мер мас­си­ва за­дан не­вер­но
d = is(Blah); // False (ес­ли тип с име­нем Blah не был оп­ре­де­лен)
writeln("a = ", a, "; b = ", b, "; c = ", c, "; d = ", d, ';');
alias uint UInt;
assert(is(uint == UInt));
a = is(int[5] : int[]), // true, int[5] мо­жет быть пре­об­ра­зо­ван к int[]
b = is(int[5] == int[]), // false; это раз­ные ти­пы
c = is(uint : long), // true
d = is(ulong : long); // true
writeln("a = ", a, "; b = ", b, "; c = ", c, "; d = ", d, ';');
}

View file

@ -0,0 +1,10 @@
import std.stdio;
void main()
{
int[] a = new int[5]; // Соз­дать мас­сив из пя­ти це­лых чи­сел
int[] b = a[3 .. 5]; // b ссы­ла­ет­ся на два по­след­них эле­мен­та a
b[0] = 1;
b[1] = 3;
assert(a == [ 0, 0, 0, 1, 3 ]); // a был из­ме­нен
}

View file

@ -0,0 +1,16 @@
import std.stdio;
void main()
{
auto arr1 = new int[4];
assert(arr1.length == 4);
assert(arr1 == [ 0, 0, 0, 0 ]); // Ини­циа­ли­зи­ро­ван по умол­ча­нию
auto arr2 = new int[](4);
assert(arr2.length == 4);
assert(arr2 == [ 0, 0, 0, 0 ]); // Ини­циа­ли­зи­ро­ван по умол­ча­нию
auto matrix = new int[][](4, 8);
assert(matrix.length == 4);
assert(matrix[0].length == 8);
}

View file

@ -0,0 +1,7 @@
import std.stdio;
void main()
{
auto a = 2 ^^ 3;
writeln(a); // 8
}

View file

@ -0,0 +1,7 @@
import std.stdio;
void main()
{
auto a = 2 ^^ 3;
writeln(a); // 8
}