From a81b72b29554b27a3d640711a3ead9d84f41db53 Mon Sep 17 00:00:00 2001 From: Anton Davydov Date: Thu, 15 Oct 2015 23:57:48 +0300 Subject: [rmux/ru] Add russian translation for tmux doc --- ru-ru/tmux-ru.html.markdown | 253 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100644 ru-ru/tmux-ru.html.markdown (limited to 'ru-ru') diff --git a/ru-ru/tmux-ru.html.markdown b/ru-ru/tmux-ru.html.markdown new file mode 100644 index 00000000..b379fb4b --- /dev/null +++ b/ru-ru/tmux-ru.html.markdown @@ -0,0 +1,253 @@ +--- +category: tool +tool: tmux +contributors: + - ["mdln", "https://github.com/mdln"] +translators: + - ["Davydov Anton", "https://github.com/davydovanton"] +filename: LearnTmux.txt +lang: ru-ru +--- + +[tmux](http://tmux.sourceforge.net) - терминальный мультиплексор. +Он позволяет создавать, получать доступ и контролировать любое +количество терминалов из единого окна. +Сессия tmux также может быть закрыта из экрана терминала, и она +будет работать в фоне, а после к ней можно будет подключиться. + + +``` + + tmux [command] # Запуск команды 'tmux' + # без какой-либо команды создаст новую сессию + + new # Создать новую сессию + -s "Session" # Создать именованную сессию + -n "Window" # Создать именованное окно + -c "/dir" # Запустить сессию в конкретной директории + + attach # Подключиться к последней/существующей сессии + -t "#" # Подключиться к определенной сессии + -d # Завершить определенную сессию + + ls # Список открытых сессий + -a # Список всех открытых сессиий + + lsw # Список окон + -a # Список всех окон + -s # Список всех окон в сессии + + lsp # Список панелей + -a # Список всех панелей + -s # Список всех панелей в сессии + -t # Список всех панелей для конкретного объекта + + kill-window # Закрыть текущее окно + -t "#" # Закрыть конкретное окно + -a # Закрыть все окна + -a -t "#" # Закрыть все окна кроме конкретного + + kill-session # Завершить текущую сессию + -t "#" # Завершить конкретную сессию + -a # Завершить все сессии + -a -t "#" # Завершить все сессии кроме конкретной + +``` + + +### Горячие клавиши + +Способ, с помощью которого контролируется любая tmux +сессия - комбинация клавиш, называемая 'Префиксом'. + +``` +---------------------------------------------------------------------- + (C-b) = Ctrl + b # 'Префикс' необходим для + # использования горячих клавиш + + (M-1) = Meta + 1 -или- Alt + 1 +---------------------------------------------------------------------- + + ? # Список всех горячих клавиш + : # Начать ввод в командной строке tmux + r # Принудительная перерисовка текущего клиента + c # Создать новое окно + + ! # Переместить текущую панель в отдельное окно + % # Разделить текущую панель на две: левую и правую + " # Разделить текущую панель на две: верхнюю и нижнюю + + n # Переместиться на следующее окно + p # Переместиться на предыдущее окно + { # Заменить текущую панель на предыдущую + } # Заменить текущую панель на следующую + + s # Интерактивный выбор запущенных сессий + w # Интерактивный выбор текущего окна + от 0 до 9 # Выбрать окно номер 0..9 + + d # Отключить текущий клиент + D # Выбрать клиент, который будет отключен + + & # Закрыть текущее окно + x # Закрыть текущую панель + + Up, Down # Переместиться на панель выше, ниже, левее + Left, Right # или правее + + M-1 to M-5 # Расставить панели: + # 1) выровнять по горизонтали + # 2) выровнять по вертикали + # 3) основное горизонтально + # 4) основное вертикально + # 5) мозаикой + + C-Up, C-Down # Изменение размера текущей панели с шагом в одну + C-Left, C-Right # колонку + + M-Up, M-Down # Изменение размера текущей панели с шагом в пять + M-Left, M-Right # колонок + +``` + + +### Настройка ~/.tmux.conf + +tmux.conf файл может быть использован для автоматической установки +опций при старте, как, например, .vimrc или init.el. + +``` +# Пример файла tmux.conf +# 2014.10 + + +### Основные конфигурации +########################################################################### + +# Включить поддержку UTF-8 +setw -g utf8 on +set-option -g status-utf8 on + +# Установить лимит истории +set -g history-limit 2048 + +# Порядковый номер первой панели +set -g base-index 1 + +# Включить поддержу мыши +set-option -g mouse-select-pane on + +# Принудительная перезагрузка конфигурационного файла +unbind r +bind r source-file ~/.tmux.conf + + +### Горячие клавиши +########################################################################### + +# Отменить комбинацию C-b как стандартный префикс +unbind C-b + +# Установить новую комбинацию как префикс +set-option -g prefix ` + +# Вернуть предыдущее окно, если префикс был нажат два раза +bind C-a last-window +bind ` last-window + +# Разрешить замену C-a и ` на F11/F12 +bind F11 set-option -g prefix C-a +bind F12 set-option -g prefix ` + +# Настройки клавиш +setw -g mode-keys vi +set-option -g status-keys vi + +# Перемещение между панелями как в vim +bind h select-pane -L +bind j select-pane -D +bind k select-pane -U +bind l select-pane -R + +# Переключить/Заменить окно +bind e previous-window +bind f next-window +bind E swap-window -t -1 +bind F swap-window -t +1 + +# Комманды упрощающие разделением панелей +bind = split-window -h +bind - split-window -v +unbind '"' +unbind % + +# Активировать inner-most сессию (когда вложенный tmux) для отправки команд +bind a send-prefix + + +### Цветовая схема +########################################################################### + +# Цветовая палитра статусбара +set-option -g status-justify left +set-option -g status-bg black +set-option -g status-fg white +set-option -g status-left-length 40 +set-option -g status-right-length 80 + +# Цветовая палитра окантовки панели +set-option -g pane-active-border-fg green +set-option -g pane-active-border-bg black +set-option -g pane-border-fg white +set-option -g pane-border-bg black + +# Цветовая палитра сообщений +set-option -g message-fg black +set-option -g message-bg green + +# Цветовая палитра окна статусов +setw -g window-status-bg black +setw -g window-status-current-fg green +setw -g window-status-bell-attr default +setw -g window-status-bell-fg red +setw -g window-status-content-attr default +setw -g window-status-content-fg yellow +setw -g window-status-activity-attr default +setw -g window-status-activity-fg yellow + + +### UI +########################################################################### + +# Нотификации +setw -g monitor-activity on +set -g visual-activity on +set-option -g bell-action any +set-option -g visual-bell off + +# Автоматическая установка заголовка окна +set-option -g set-titles on +set-option -g set-titles-string '#H:#S.#I.#P #W #T' # window number,program name,active (or not) + +# Настройки статусбара +set -g status-left "#[fg=red] #H#[fg=green]:#[fg=white]#S#[fg=green] |#[default]" + +# Показывать системные характеристики в статусбаре +# Требует https://github.com/thewtex/tmux-mem-cpu-load/ +set -g status-interval 4 +set -g status-right "#[fg=green] | #[fg=white]#(tmux-mem-cpu-load)#[fg=green] | #[fg=cyan]%H:%M #[default]" + +``` + + +### Ссылки + +[Tmux | Домашняя страница](http://tmux.sourceforge.net) + +[Страница мануала Tmux](http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1?query=tmux) + +[Gentoo Wiki](http://wiki.gentoo.org/wiki/Tmux) + +[Archlinux Wiki](https://wiki.archlinux.org/index.php/Tmux) + +[Отображение CPU/MEM % в статусбаре](https://stackoverflow.com/questions/11558907/is-there-a-better-way-to-display-cpu-usage-in-tmux) -- cgit v1.2.3 From a5182d8021920760fc863c0c80581e4210590b8f Mon Sep 17 00:00:00 2001 From: Anton Ivanov Date: Sat, 31 Oct 2015 16:30:09 +0300 Subject: Fix and update russian translation for PHP. --- ru-ru/php-ru.html.markdown | 55 ++++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 24 deletions(-) (limited to 'ru-ru') diff --git a/ru-ru/php-ru.html.markdown b/ru-ru/php-ru.html.markdown index dc254bf8..f6daa946 100644 --- a/ru-ru/php-ru.html.markdown +++ b/ru-ru/php-ru.html.markdown @@ -32,7 +32,7 @@ print('Hello '); // Напечатать "Hello " без перевода стр // () необязательно применять для print и echo echo "World\n"; // Напечатать "World" и перейти на новую строку. -// (все утверждения должны заканчиваться ;) +// (все утверждения должны заканчиваться точкой с запятой) // Любые символы за пределами закрывающего тега выводятся автоматически: ?> @@ -45,8 +45,8 @@ Hello World Again! */ // Переменные начинаются с символа $. -// Правильное имя переменной начинается с буквы или знака подчеркивания, -// и может содержать любые цифры, буквы, или знаки подчеркивания. +// Правильное имя переменной начинается с буквы или символа подчеркивания, +// за которым следует любое количество букв, цифр или символов подчеркивания. // Не рекомендуется использовать кириллические символы в именах (прим. пер.) // Логические значения нечувствительны к регистру @@ -55,7 +55,7 @@ $boolean = false; // или FALSE или False // Целые числа $int1 = 12; // => 12 -$int2 = -12; // => -12- +$int2 = -12; // => -12 $int3 = 012; // => 10 (ведущий 0 обозначает восьмеричное число) $int4 = 0x0F; // => 15 (ведущие символы 0x означают шестнадцатеричное число) @@ -87,7 +87,7 @@ $dbl_quotes = "This is a $sgl_quotes."; // => 'This is a $String.' $escaped = "This contains a \t tab character."; $unescaped = 'This just contains a slash and a t: \t'; -// Заключайте переменные в фигурные скобки если это необходимо +// Заключайте переменные в фигурные скобки, если это необходимо $money = "I have $${number} in the bank."; // Начиная с PHP 5.3, синтаксис nowdocs может использоваться для @@ -106,6 +106,9 @@ END; // Строки соединяются при помощи . echo 'This string ' . 'is concatenated'; +// echo можно передавать строки как параметры +echo 'Multiple', 'Parameters', 'Valid'; // печатает 'MultipleParametersValid' + /******************************** * Константы @@ -114,18 +117,19 @@ echo 'This string ' . 'is concatenated'; // Константа определяется при помощи define() // и никогда не может быть изменена во время выполнения программы! -// Правильное имя константы начинается с буквы или символа подчеркивания, -// и содержит любое колличество букв, цифр и знаков подчеркивания. +// Правильное имя константы начинается с буквы или символа подчеркивания +// и содержит любое колличество букв, цифр или символов подчеркивания. define("FOO", "something"); -// Доступ к константе возможен через прямое указание её имени -echo 'This outputs '.FOO; +// Доступ к константе возможен через прямое указание её имени без знака $ +echo FOO; // печатает 'something' +echo 'This outputs ' . FOO; // печатает 'This ouputs something' /******************************** * Массивы */ -// Все массивы в PHP - это ассоциативные массивы или хеши, +// Все массивы в PHP - это ассоциативные массивы // Ассоциативные массивы, известные в других языках как HashMap. @@ -189,7 +193,7 @@ $b = '0'; $c = '1'; $d = '1'; -// Утверждение (assert) выдает предупреждение если аргумент не true +// Утверждение (assert) выдает предупреждение, если его аргумент не true // Эти сравнения всегда будут истинными, даже если типы будут различаться assert($a == $b); // "равно" @@ -284,35 +288,35 @@ This is displayed otherwise. // Использование switch. switch ($x) { case '0': - print 'Switch does type coercion'; - break; // You must include a break, or you will fall through - // to cases 'two' and 'three' + print 'Switch использует неточное сравнение'; + break; // вы должны использовать break, иначе PHP будет продолжать + // исполнять команды следующих секций case 'two' и 'three' case 'two': case 'three': - // Do something if $variable is either 'two' or 'three' + // делаем что-то, если $x == 'two' или $x == 'three' break; default: - // Do something by default + // делаем что-то по умолчанию } // Циклы: while, do...while и for $i = 0; while ($i < 5) { echo $i++; -}; // Prints "01234" +}; // печатает "01234" echo "\n"; $i = 0; do { echo $i++; -} while ($i < 5); // Prints "01234" +} while ($i < 5); // печатает "01234" echo "\n"; for ($x = 0; $x < 10; $x++) { echo $x; -} // Напечатает "0123456789" +} // печатает "0123456789" echo "\n"; @@ -335,17 +339,17 @@ echo "\n"; $i = 0; while ($i < 5) { if ($i === 3) { - break; // Exit out of the while loop + break; // выйти из цикла while } echo $i++; } // Напечатает "012" for ($i = 0; $i < 5; $i++) { if ($i === 3) { - continue; // Skip this iteration of the loop + continue; // пропустить текущую итерацию цикла } echo $i; -} // Напечатает "0124" +} // печатает "0124" /******************************** @@ -360,7 +364,7 @@ function my_function () { echo my_function(); // => "Hello" // Правильное имя функции начинается с буквы или символа подчеркивания -// и состоит из букв, цифр или знаков подчеркивания. +// и состоит из букв, цифр или символов подчеркивания. function add ($x, $y = 1) { // $y по умолчанию равно 1 $result = $x + $y; @@ -656,7 +660,10 @@ $cls = new SomeOtherNamespace\MyClass(); ``` ## Смотрите также: -Посетите страницу [официальной документации PHP](http://www.php.net/manual/) для справки. +Посетите страницу [официальной документации PHP](http://www.php.net/manual/) для справки. + Если вас интересуют полезные приемы использования PHP посетите [PHP The Right Way](http://www.phptherightway.com/). + Если вы раньше пользовались языком с хорошей организацией пакетов, посмотрите [Composer](http://getcomposer.org/). + Для изучения стандартов использования языка посетите PHP Framework Interoperability Group's [PSR standards](https://github.com/php-fig/fig-standards). -- cgit v1.2.3 From bbdfc9502f3476d637107ceec71dc2adf0186f67 Mon Sep 17 00:00:00 2001 From: Anton Ivanov Date: Sat, 31 Oct 2015 17:35:51 +0300 Subject: Update russian translation for Java. --- ru-ru/java-ru.html.markdown | 46 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 11 deletions(-) (limited to 'ru-ru') diff --git a/ru-ru/java-ru.html.markdown b/ru-ru/java-ru.html.markdown index b24ad555..a1a5cdfc 100644 --- a/ru-ru/java-ru.html.markdown +++ b/ru-ru/java-ru.html.markdown @@ -9,7 +9,7 @@ filename: LearnJavaRu.java lang: ru-ru --- -Java - это объектно ориентированный язык программирования общего назначения, +Java - это объектно-ориентированный язык программирования общего назначения, основанный на классах и поддерживающий параллельное программирование. [Подробнее читайте здесь.](http://docs.oracle.com/javase/tutorial/java/index.html) @@ -43,17 +43,41 @@ public class LearnJavaRu { " Double: " + 3.14 + " Boolean: " + true); - // Чтобы напечатать что-либо не заканчивая переводом строки - // используется System.out.print. + // Чтобы печатать что-либо, не заканчивая переводом строки, + // используйте System.out.print. System.out.print("Hello "); System.out.print("World"); + // Используйте System.out.printf() для печати с форматированием + System.out.printf("pi = %.5f", Math.PI); // => pi = 3.14159 /////////////////////////////////////// - // Типы и Переменные + // Переменные /////////////////////////////////////// + /* + * Объявление переменных + */ // Переменные объявляются с использованием <тип> <имя> + int fooInt; + // Одновременное объявление нескольких переменных одного типа + // , , + int fooInt1, fooInt2, fooInt3; + + /* + * Инициализация переменных + */ + + // объявление и инициализация переменной = + int fooInt = 1; + int fooInt1, fooInt2, fooInt3; + // инициализация нескольких переменных одного типа + // , , = + fooInt1 = fooInt2 = fooInt3 = 1; + + /* + * Типы переменных + */ // Byte - 8-битное целое число. // (-128 <= byte <= 127) byte fooByte = 100; @@ -247,7 +271,7 @@ public class LearnJavaRu { // Switch Case // switch работает с типами byte, short, char и int. // Также он работает с перечислениями, - // классом String и с некоторыми классами-обертками над + // классом String (с Java 7) и с некоторыми классами-обертками над // примитивными типами: Character, Byte, Short и Integer. int month = 3; String monthString; @@ -319,7 +343,7 @@ public class LearnJavaRu { System.out.println("trek info: " + trek.toString()); } // Конец метода main. -} // Конец класса LearnJava. +} // Конец класса LearnJavaRu. // Вы можете включать другие, не публичные классы в .java файл. @@ -362,7 +386,7 @@ class Bicycle { // Классы в Java часто реализуют сеттеры и геттеры для своих полей. // Синтаксис определения метода: - // <модификатор> <тип возвращаемого значения> <имя>(<аргументы>) + // <модификатор доступа> <тип возвращаемого значения> <имя метода>(<аргументы>) public int getCadence() { return cadence; } @@ -424,10 +448,10 @@ class PennyFarthing extends Bicycle { // Интерфейсы // Синтаксис определения интерфейса: -// <модификатор доступа> interface <имя> extends <базовый интерфейс> { -// // Константы -// // Определение методов. -//} +// <модификатор доступа> interface <имя интерфейса> extends <базовый интерфейс> { +// // Константы +// // Определение методов +// } // Пример - Еда: public interface Edible { -- cgit v1.2.3 From 24f4a4fdab76111889d356c25cd31e2d21e2fbcc Mon Sep 17 00:00:00 2001 From: Anton Ivanov Date: Sat, 31 Oct 2015 18:42:42 +0300 Subject: Update Markdown russian translation. --- ru-ru/markdown-ru.html.markdown | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'ru-ru') diff --git a/ru-ru/markdown-ru.html.markdown b/ru-ru/markdown-ru.html.markdown index eb8e4881..c4c25ef2 100644 --- a/ru-ru/markdown-ru.html.markdown +++ b/ru-ru/markdown-ru.html.markdown @@ -61,7 +61,7 @@ __И этот тоже.__ **_И тут!_** *__И даже здесь!__* - ~~Зачёркнутый текст.~~ @@ -139,6 +139,14 @@ __И этот тоже.__ * Сложные 4. Заключение + + +Для отметки включенного чекбокса используйте 'x' +- [ ] Первая задача +- [ ] Вторая задача +Этот чекбокс ниже будет отмечен +- [x] Задача была завершена + @@ -252,6 +260,12 @@ end \*текст, заключённый в звёздочки!\* + + + +Ваш компьютер завис? Попробуйте нажать +Ctrl+Alt+Del + ~~Зачёркнутый текст.~~ @@ -157,7 +157,7 @@ __И этот тоже.__ Например, можно выделить имя функции `go_to()` прямо посреди текста. - \`\`\`ruby @@ -167,7 +167,7 @@ end \`\`\` <-- Обратите внимание: фрагмент, указанный выше, не предваряется отступами, -поскольку Github сам в состоянии определить границы блока - по строкам "```" --> +поскольку GitHub сам в состоянии определить границы блока - по строкам "```" --> - -- cgit v1.2.3 From 878bd1a68d51077f918f82bae9cdc9a570ed10e6 Mon Sep 17 00:00:00 2001 From: Fadil Mamedov Date: Thu, 23 Jul 2015 16:34:07 +0300 Subject: [typescript/ru] Russian translation of the TypeScript article --- ru-ru/typescript-ru.html.markdown | 171 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 ru-ru/typescript-ru.html.markdown (limited to 'ru-ru') diff --git a/ru-ru/typescript-ru.html.markdown b/ru-ru/typescript-ru.html.markdown new file mode 100644 index 00000000..fe1653ff --- /dev/null +++ b/ru-ru/typescript-ru.html.markdown @@ -0,0 +1,171 @@ +--- +language: TypeScript +lang: ru-ru +contributors: + - ["Fadil Mamedov", "https://github.com/fadilmamedov"] +filename: learntypescript-ru.ts +--- + +TypeScript - это язык программирования, целью которого является легкая разработка широко-масштабируемых JavaScript приложений. +TypeScript добавляет общие концепции, такие как классы, модули, интерфейсы, дженерики и (опционально) статическую типизацию в JavaScript. +Это надмножество языка JavaScript: весь JavaScript код является валидным TypeScript кодом, следовательно может быть добавлен бесшовно в любой проект. +Компилятор TypeScript генерирует JavaScript код. + +Эта статья концентрируется только на синтаксисе TypeScript, в противовес статьте о [JavaScript](../javascript/). + +Для тестирования компилятора TypeScript, пройдите по ссылке в [песочницу](http://www.typescriptlang.org/Playground). +Там вы можете написать код (с поддержкой автодополнения) и сразу же увидеть сгенерированный JavaScript код. + +```js +// В TypeScript есть 3 базовых типа +var isDone: boolean = false; +var lines: number = 42; +var name: string = "Anders"; + +// Тип "Any" для случаев, когда заранее неизвестен тип переменной +var notSure: any = 4; +notSure = "maybe a string instead"; +notSure = false; // а теперь логический тип + +// Для коллекций есть типизированные массивы и дженерик-массивы +var list: number[] = [1, 2, 3]; +// Как альтернатива, использование дженерик-массива +var list: Array = [1, 2, 3]; + +// Для перечислений: +enum Color {Red, Green, Blue}; +var c: Color = Color.Green; + +// Наконец, "void" используется для обозначения того, что функция ничего не возвращает +function bigHorribleAlert(): void { + alert("I'm a little annoying box!"); +} + +// Функции - это первый члены класса. Они поддерживают лябмда-синтаксис (=>) +// и используют интерфейс типа + +// Следующий строки кода являются эквивалентными, компилятором предполагается +// одинаковая сигнатура, на выходе генерируется одинаковый JavaScript код +var f1 = function(i: number): number { return i * i; } +// Предполагается возвращаемый тип +var f2 = function(i: number) { return i * i; } +var f3 = (i: number): number => { return i * i; } +// Предполагается возвращаемый тип +var f4 = (i: number) => { return i * i; } +// Return type inferred, one-liner means no return keyword needed +// Предполагается возвращаемый тип, ключевое слово "return" не нужно +var f5 = (i: number) => i * i; + +// Интерфейсы являются структурными; все, что имеет свойства совместимо в интерфейсом +interface Person { + name: string; + // Опциональные свойства, помеченные символом "?" + age?: number; + // И конечно функции + move(): void; +} + +// Объект, который реализует интерфейс "Person" +// К нему можно обращаться как к "Person", так как он имеет свойства "name" и "move" +var p: Person = { name: "Bobby", move: () => {} }; +// Объекты, которые могут иметь опциональные свойства: +var validPerson: Person = { name: "Bobby", age: 42, move: () => {} }; +// Это не "Person", поскольку "age" не является числовым значением +var invalidPerson: Person = { name: "Bobby", age: true }; + +// Интерфейсы могут также описывать функциональный тип +interface SearchFunc { + (source: string, subString: string): boolean; +} +// Важны только типы параметров, имена - нет. +var mySearch: SearchFunc; +mySearch = function(src: string, sub: string) { + return src.search(sub) != -1; +} + +// Классы - члены класса по умолчанию являются публичными +class Point { + // Свойства + x: number; + + // Конструктор - ключевые слова public/private в данном контексте сгенерируют + // шаблонный код для свойства и для инициализации в конструкторе + // В данном примере, "y" будет определен также как и "x", но меньшим количеством кода + // Значения по умолчанию также поддерживаются + + constructor(x: number, public y: number = 0) { + this.x = x; + } + + // Функции + dist() { return Math.sqrt(this.x * this.x + this.y * this.y); } + + // Статические члены + static origin = new Point(0, 0); +} + +var p1 = new Point(10 ,20); +var p2 = new Point(25); //y will be 0 + +// Наследование +class Point3D extends Point { + constructor(x: number, y: number, public z: number = 0) { + super(x, y); // Явный вызов конструктора базового класса обязателен + } + + // Перегрузка + dist() { + var d = super.dist(); + return Math.sqrt(d * d + this.z * this.z); + } +} + +// Модули, "." может быть использован как разделитель для обозначения подмодулей +module Geometry { + export class Square { + constructor(public sideLength: number = 0) { + } + area() { + return Math.pow(this.sideLength, 2); + } + } +} + +var s1 = new Geometry.Square(5); + +// Локальный псевдоним для ссылки на модуль +import G = Geometry; + +var s2 = new G.Square(10); + +// Дженерики +// Классы +class Tuple { + constructor(public item1: T1, public item2: T2) { + } +} + +// Интерфейсы +interface Pair { + item1: T; + item2: T; +} + +// И функции +var pairToTuple = function(p: Pair) { + return new Tuple(p.item1, p.item2); +}; + +var tuple = pairToTuple({ item1:"hello", item2:"world"}); + +// Включение ссылки на файл определения: +/// + +``` + +## Для дальнейшего чтения + * [Официальный веб-сайт TypeScript](http://www.typescriptlang.org/) + * [Спецификация языка TypeScript (pdf)](http://go.microsoft.com/fwlink/?LinkId=267238) + * [Anders Hejlsberg - Introducing TypeScript на Channel 9](http://channel9.msdn.com/posts/Anders-Hejlsberg-Introducing-TypeScript) + * [Исходный код на GitHub](https://github.com/Microsoft/TypeScript) + * [Definitely Typed - репозиторий определений типов](http://definitelytyped.org/) -- cgit v1.2.3 From d80f8d2c80156f2d24532509fbdca24252f18f02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=20Polykanine=20A=2EK=2EA=2E=20Menelion=20Elens=C3=BA?= =?UTF-8?q?l=C3=AB?= Date: Sun, 28 Feb 2016 16:11:06 +0200 Subject: Applied comments to #1173 --- ru-ru/typescript-ru.html.markdown | 78 ++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 38 deletions(-) (limited to 'ru-ru') diff --git a/ru-ru/typescript-ru.html.markdown b/ru-ru/typescript-ru.html.markdown index fe1653ff..67b58a38 100644 --- a/ru-ru/typescript-ru.html.markdown +++ b/ru-ru/typescript-ru.html.markdown @@ -2,95 +2,97 @@ language: TypeScript lang: ru-ru contributors: + - ["Philippe Vlérick", "https://github.com/pvlerick"] +translators: - ["Fadil Mamedov", "https://github.com/fadilmamedov"] + - "Andre Polykanine", "https://github.com/Oire"] filename: learntypescript-ru.ts --- -TypeScript - это язык программирования, целью которого является легкая разработка широко-масштабируемых JavaScript приложений. -TypeScript добавляет общие концепции, такие как классы, модули, интерфейсы, дженерики и (опционально) статическую типизацию в JavaScript. -Это надмножество языка JavaScript: весь JavaScript код является валидным TypeScript кодом, следовательно может быть добавлен бесшовно в любой проект. -Компилятор TypeScript генерирует JavaScript код. +TypeScript — это язык программирования, целью которого является лёгкая разработка широкомасштабируемых JavaScript-приложений. +TypeScript добавляет в Javascript общие концепции, такие, как классы, модули, интерфейсы, обобщённое программирование и (опционально) статическую типизацию. +Это надмножество языка JavaScript: весь JavaScript-код является валидным TypeScript-кодом, следовательно, может быть добавлен бесшовно в любой проект. +Компилятор TypeScript генерирует JavaScript-код. -Эта статья концентрируется только на синтаксисе TypeScript, в противовес статьте о [JavaScript](../javascript/). +Эта статья концентрируется только на синтаксисе TypeScript, в противовес статье о [JavaScript](javascript-ru/). -Для тестирования компилятора TypeScript, пройдите по ссылке в [песочницу](http://www.typescriptlang.org/Playground). +Для тестирования компилятора TypeScript пройдите по ссылке в [песочницу](http://www.typescriptlang.org/Playground). Там вы можете написать код (с поддержкой автодополнения) и сразу же увидеть сгенерированный JavaScript код. ```js // В TypeScript есть 3 базовых типа var isDone: boolean = false; var lines: number = 42; -var name: string = "Anders"; +var name: string = "Андерс"; -// Тип "Any" для случаев, когда заранее неизвестен тип переменной +// Тип «any» для случаев, когда заранее неизвестен тип переменной var notSure: any = 4; -notSure = "maybe a string instead"; +notSure = "а может быть, строка"; notSure = false; // а теперь логический тип -// Для коллекций есть типизированные массивы и дженерик-массивы +// Для коллекций есть типизированные массивы и обобщённые массивы var list: number[] = [1, 2, 3]; -// Как альтернатива, использование дженерик-массива +// Как альтернатива, использование обобщённого массива var list: Array = [1, 2, 3]; -// Для перечислений: +// Перечисления: enum Color {Red, Green, Blue}; var c: Color = Color.Green; -// Наконец, "void" используется для обозначения того, что функция ничего не возвращает +// Наконец, «void» используется для обозначения того, что функция ничего не возвращает function bigHorribleAlert(): void { - alert("I'm a little annoying box!"); + alert("Я маленькое надоедливое окошко!"); } -// Функции - это первый члены класса. Они поддерживают лябмда-синтаксис (=>) -// и используют интерфейс типа +// Функции — это объекты первого класса. Они поддерживают лямбда-синтаксис (=>) +// и используют вывод типов (type inference) -// Следующий строки кода являются эквивалентными, компилятором предполагается -// одинаковая сигнатура, на выходе генерируется одинаковый JavaScript код +// Следующие строки кода являются эквивалентными, компилятором предполагается +// одинаковая сигнатура, на выходе генерируется одинаковый JavaScript-код var f1 = function(i: number): number { return i * i; } // Предполагается возвращаемый тип var f2 = function(i: number) { return i * i; } var f3 = (i: number): number => { return i * i; } // Предполагается возвращаемый тип var f4 = (i: number) => { return i * i; } -// Return type inferred, one-liner means no return keyword needed -// Предполагается возвращаемый тип, ключевое слово "return" не нужно +// Предполагается возвращаемый тип, в однострочной функции ключевое слово «return» не нужно var f5 = (i: number) => i * i; -// Интерфейсы являются структурными; все, что имеет свойства совместимо в интерфейсом +// Интерфейсы являются структурными; всё, что имеет свойства, совместимо с интерфейсом interface Person { name: string; - // Опциональные свойства, помеченные символом "?" + // Опциональные свойства, помеченные символом «?» age?: number; - // И конечно функции + // И, конечно, функции move(): void; } -// Объект, который реализует интерфейс "Person" -// К нему можно обращаться как к "Person", так как он имеет свойства "name" и "move" -var p: Person = { name: "Bobby", move: () => {} }; +// Объект, который реализует интерфейс «Person» +// К нему можно обращаться, как к «Person», так как он имеет свойства «name» и «move» +var p: Person = { name: "Бобби", move: () => {} }; // Объекты, которые могут иметь опциональные свойства: -var validPerson: Person = { name: "Bobby", age: 42, move: () => {} }; -// Это не "Person", поскольку "age" не является числовым значением -var invalidPerson: Person = { name: "Bobby", age: true }; +var validPerson: Person = { name: "Бобби", age: 42, move: () => {} }; +// Это не «Person», поскольку «age» не является числовым значением +var invalidPerson: Person = { name: "Бобби", age: true }; // Интерфейсы могут также описывать функциональный тип interface SearchFunc { (source: string, subString: string): boolean; } -// Важны только типы параметров, имена - нет. +// Важны только типы параметров, имена — нет. var mySearch: SearchFunc; mySearch = function(src: string, sub: string) { return src.search(sub) != -1; } -// Классы - члены класса по умолчанию являются публичными +// Классы. Члены класса по умолчанию являются публичными class Point { // Свойства x: number; - // Конструктор - ключевые слова public/private в данном контексте сгенерируют + // Конструктор — ключевые слова public/private в данном контексте сгенерируют // шаблонный код для свойства и для инициализации в конструкторе - // В данном примере, "y" будет определен также как и "x", но меньшим количеством кода + // В данном примере «y» будет определён так же, как и «x», но меньшим количеством кода // Значения по умолчанию также поддерживаются constructor(x: number, public y: number = 0) { @@ -105,7 +107,7 @@ class Point { } var p1 = new Point(10 ,20); -var p2 = new Point(25); //y will be 0 +var p2 = new Point(25); //y будет равен 0 // Наследование class Point3D extends Point { @@ -120,7 +122,7 @@ class Point3D extends Point { } } -// Модули, "." может быть использован как разделитель для обозначения подмодулей +// Модули, знак «.» может быть использован как разделитель для обозначения подмодулей module Geometry { export class Square { constructor(public sideLength: number = 0) { @@ -138,7 +140,7 @@ import G = Geometry; var s2 = new G.Square(10); -// Дженерики +// Обобщённое программирование // Классы class Tuple { constructor(public item1: T1, public item2: T2) { @@ -166,6 +168,6 @@ var tuple = pairToTuple({ item1:"hello", item2:"world"}); ## Для дальнейшего чтения * [Официальный веб-сайт TypeScript](http://www.typescriptlang.org/) * [Спецификация языка TypeScript (pdf)](http://go.microsoft.com/fwlink/?LinkId=267238) - * [Anders Hejlsberg - Introducing TypeScript на Channel 9](http://channel9.msdn.com/posts/Anders-Hejlsberg-Introducing-TypeScript) + * [Anders Hejlsberg — Introducing TypeScript на Channel 9](http://channel9.msdn.com/posts/Anders-Hejlsberg-Introducing-TypeScript) * [Исходный код на GitHub](https://github.com/Microsoft/TypeScript) - * [Definitely Typed - репозиторий определений типов](http://definitelytyped.org/) + * [Definitely Typed — репозиторий определений типов](http://definitelytyped.org/) -- cgit v1.2.3 From b5720ab4b6f298df30c53d92ef4db6650b7d82d3 Mon Sep 17 00:00:00 2001 From: Anton Davydov Date: Wed, 9 Mar 2016 00:40:29 +0300 Subject: Fix typos and punctuation --- ru-ru/tmux-ru.html.markdown | 99 ++++++++++++++++++++++----------------------- 1 file changed, 49 insertions(+), 50 deletions(-) (limited to 'ru-ru') diff --git a/ru-ru/tmux-ru.html.markdown b/ru-ru/tmux-ru.html.markdown index b379fb4b..aa7545cc 100644 --- a/ru-ru/tmux-ru.html.markdown +++ b/ru-ru/tmux-ru.html.markdown @@ -5,14 +5,14 @@ contributors: - ["mdln", "https://github.com/mdln"] translators: - ["Davydov Anton", "https://github.com/davydovanton"] -filename: LearnTmux.txt +filename: LearnTmux-ru.txt lang: ru-ru --- [tmux](http://tmux.sourceforge.net) - терминальный мультиплексор. Он позволяет создавать, получать доступ и контролировать любое количество терминалов из единого окна. -Сессия tmux также может быть закрыта из экрана терминала, и она +Сессия tmux также может быть свернута в фоновый режим, и она будет работать в фоне, а после к ней можно будет подключиться. @@ -27,11 +27,11 @@ lang: ru-ru -c "/dir" # Запустить сессию в конкретной директории attach # Подключиться к последней/существующей сессии - -t "#" # Подключиться к определенной сессии + -t "№" # Подключиться к определенной сессии -d # Завершить определенную сессию ls # Список открытых сессий - -a # Список всех открытых сессиий + -a # Список всех открытых сессий lsw # Список окон -a # Список всех окон @@ -45,20 +45,20 @@ lang: ru-ru kill-window # Закрыть текущее окно -t "#" # Закрыть конкретное окно -a # Закрыть все окна - -a -t "#" # Закрыть все окна кроме конкретного + -a -t "#" # Закрыть все окна, кроме конкретного kill-session # Завершить текущую сессию -t "#" # Завершить конкретную сессию -a # Завершить все сессии - -a -t "#" # Завершить все сессии кроме конкретной + -a -t "#" # Завершить все сессии, кроме конкретной ``` -### Горячие клавиши +### "Горячие" клавиши Способ, с помощью которого контролируется любая tmux -сессия - комбинация клавиш, называемая 'Префиксом'. +сессия, - комбинация клавиш, называемая 'Префиксом'. ``` ---------------------------------------------------------------------- @@ -68,52 +68,52 @@ lang: ru-ru (M-1) = Meta + 1 -или- Alt + 1 ---------------------------------------------------------------------- - ? # Список всех горячих клавиш - : # Начать ввод в командной строке tmux - r # Принудительная перерисовка текущего клиента - c # Создать новое окно + ? # Список всех горячих клавиш + : # Начать ввод в командной строке tmux + r # Принудительная перерисовка текущего клиента + c # Создать новое окно - ! # Переместить текущую панель в отдельное окно - % # Разделить текущую панель на две: левую и правую - " # Разделить текущую панель на две: верхнюю и нижнюю + ! # Переместить текущую панель в отдельное окно + % # Разделить текущую панель на две: левую и правую + " # Разделить текущую панель на две: верхнюю и нижнюю - n # Переместиться на следующее окно - p # Переместиться на предыдущее окно - { # Заменить текущую панель на предыдущую - } # Заменить текущую панель на следующую + n # Переместиться на следующее окно + p # Переместиться на предыдущее окно + { # Заменить текущую панель на предыдущую + } # Заменить текущую панель на следующую - s # Интерактивный выбор запущенных сессий - w # Интерактивный выбор текущего окна - от 0 до 9 # Выбрать окно номер 0..9 + s # Интерактивный выбор запущенных сессий + w # Интерактивный выбор текущего окна + от 0 до 9 # Выбрать окно номер 0..9 - d # Отключить текущий клиент - D # Выбрать клиент, который будет отключен + d # Отключить текущий клиент + D # Выбрать клиент, который будет отключен - & # Закрыть текущее окно - x # Закрыть текущую панель + & # Закрыть текущее окно + x # Закрыть текущую панель - Up, Down # Переместиться на панель выше, ниже, левее - Left, Right # или правее + Стрелки вверх, вниз # Переместиться на панель выше, ниже, левее + влево, вправо # или правее - M-1 to M-5 # Расставить панели: - # 1) выровнять по горизонтали - # 2) выровнять по вертикали - # 3) основное горизонтально - # 4) основное вертикально - # 5) мозаикой + M-1 to M-5 # Расставить панели: + # 1) выровнять по горизонтали + # 2) выровнять по вертикали + # 3) основное горизонтально + # 4) основное вертикально + # 5) мозаикой - C-Up, C-Down # Изменение размера текущей панели с шагом в одну - C-Left, C-Right # колонку + C-Up, C-Down # Изменение размера текущей панели с шагом в одну + C-Left, C-Right # колонку - M-Up, M-Down # Изменение размера текущей панели с шагом в пять - M-Left, M-Right # колонок + M-Up, M-Down # Изменение размера текущей панели с шагом в пять + M-Left, M-Right # колонок ``` ### Настройка ~/.tmux.conf -tmux.conf файл может быть использован для автоматической установки +Файл tmux.conf может быть использован для автоматической установки опций при старте, как, например, .vimrc или init.el. ``` @@ -121,7 +121,7 @@ tmux.conf файл может быть использован для автом # 2014.10 -### Основные конфигурации +### Общее ########################################################################### # Включить поддержку UTF-8 @@ -134,7 +134,7 @@ set -g history-limit 2048 # Порядковый номер первой панели set -g base-index 1 -# Включить поддержу мыши +# Включить поддержку мыши set-option -g mouse-select-pane on # Принудительная перезагрузка конфигурационного файла @@ -163,7 +163,7 @@ bind F12 set-option -g prefix ` setw -g mode-keys vi set-option -g status-keys vi -# Перемещение между панелями как в vim +# Перемещение между панелями, как в vim bind h select-pane -L bind j select-pane -D bind k select-pane -U @@ -175,20 +175,20 @@ bind f next-window bind E swap-window -t -1 bind F swap-window -t +1 -# Комманды упрощающие разделением панелей +# Комманды, упрощающие разделением панелей bind = split-window -h bind - split-window -v unbind '"' unbind % -# Активировать inner-most сессию (когда вложенный tmux) для отправки команд +# Активировать центральную сессию (когда вложенный tmux) для отправки команд bind a send-prefix ### Цветовая схема ########################################################################### -# Цветовая палитра статусбара +# Цветовая палитра строки состояния set-option -g status-justify left set-option -g status-bg black set-option -g status-fg white @@ -205,7 +205,7 @@ set-option -g pane-border-bg black set-option -g message-fg black set-option -g message-bg green -# Цветовая палитра окна статусов +# Цветовая палитра статус окна setw -g window-status-bg black setw -g window-status-current-fg green setw -g window-status-bell-attr default @@ -216,10 +216,10 @@ setw -g window-status-activity-attr default setw -g window-status-activity-fg yellow -### UI +### Интерфейс ########################################################################### -# Нотификации +# Уведомления setw -g monitor-activity on set -g visual-activity on set-option -g bell-action any @@ -229,7 +229,7 @@ set-option -g visual-bell off set-option -g set-titles on set-option -g set-titles-string '#H:#S.#I.#P #W #T' # window number,program name,active (or not) -# Настройки статусбара +# Настройки строки состояния set -g status-left "#[fg=red] #H#[fg=green]:#[fg=white]#S#[fg=green] |#[default]" # Показывать системные характеристики в статусбаре @@ -239,7 +239,6 @@ set -g status-right "#[fg=green] | #[fg=white]#(tmux-mem-cpu-load)#[fg=green] | ``` - ### Ссылки [Tmux | Домашняя страница](http://tmux.sourceforge.net) -- cgit v1.2.3 From bf075962d6e24168c708c4b173ae4872f28b7a7d Mon Sep 17 00:00:00 2001 From: Vitaliy Petrov Date: Sat, 12 Mar 2016 23:24:38 +0300 Subject: Update c-ru.html.markdown --- ru-ru/c-ru.html.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'ru-ru') diff --git a/ru-ru/c-ru.html.markdown b/ru-ru/c-ru.html.markdown index 5988b159..63bcfe76 100644 --- a/ru-ru/c-ru.html.markdown +++ b/ru-ru/c-ru.html.markdown @@ -202,7 +202,7 @@ int main() { int ii = 0; while (ii < 10) { printf("%d, ", ii++); // инкрементация происходит после того как - // знаечние ii передано ("postincrement") + // значение ii передано ("postincrement") } // => prints "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, " printf("\n"); @@ -212,7 +212,7 @@ int main() { do { printf("%d, ", kk); } while (++kk < 10); // инкрементация происходит перед тем как - // передаётся знаечние kk ("preincrement") + // передаётся значение kk ("preincrement") // => prints "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, " printf("\n"); @@ -285,7 +285,7 @@ int main() { printf("%zu, %zu\n", sizeof(px), sizeof(not_a_pointer)); // => Напечатает "8, 4" в 64 битной системе - // Для того, чтобы получить знаечние по адресу, напечатайте * перед именем. + // Для того, чтобы получить значение по адресу, напечатайте * перед именем. // Да, использование * при объявлении указателя и получении значения по адресу // немного запутано, но вы привыкнете. printf("%d\n", *px); // => Напечаатет 0, значение перемененной x @@ -422,7 +422,7 @@ void function_1() { // Вы можете объявить указатель на структуру struct rectangle *my_rec_ptr = &my_rec; - // Можно доступаться к структуре и через указатель + // Можно можно получить доступ к структуре и через указатель (*my_rec_ptr).width = 30; // ... или ещё лучше: используйте оператор -> для лучшей читабельночти @@ -436,7 +436,7 @@ int area(rect r) { return r.width * r.height; } -// Если вы имеете большую структуру, можно доступаться к ней "по указателю", +// Если вы имеете большую структуру, можно получить доступ к ней "по указателю", // чтобы избежать копирования всей структуры. int area(const rect *r) { return r->width * r->height; -- cgit v1.2.3 From a3ff83350e0607446d14b32134510a6b414abcc8 Mon Sep 17 00:00:00 2001 From: Vitaliy Petrov Date: Tue, 15 Mar 2016 18:29:58 +0300 Subject: Update c-ru.html.markdown MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Поправил "Можно можно" =) --- ru-ru/c-ru.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ru-ru') diff --git a/ru-ru/c-ru.html.markdown b/ru-ru/c-ru.html.markdown index 63bcfe76..5e967181 100644 --- a/ru-ru/c-ru.html.markdown +++ b/ru-ru/c-ru.html.markdown @@ -422,7 +422,7 @@ void function_1() { // Вы можете объявить указатель на структуру struct rectangle *my_rec_ptr = &my_rec; - // Можно можно получить доступ к структуре и через указатель + // Можно получить доступ к структуре и через указатель (*my_rec_ptr).width = 30; // ... или ещё лучше: используйте оператор -> для лучшей читабельночти -- cgit v1.2.3 From daf150a9fe26223ad5c2f0dc7c6db4d653def554 Mon Sep 17 00:00:00 2001 From: Witcharrr Date: Tue, 5 Apr 2016 20:01:33 +0300 Subject: Small change MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "A constant" should be translated as a "Константа" --- ru-ru/php-ru.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ru-ru') diff --git a/ru-ru/php-ru.html.markdown b/ru-ru/php-ru.html.markdown index d17f24fc..42c4d360 100644 --- a/ru-ru/php-ru.html.markdown +++ b/ru-ru/php-ru.html.markdown @@ -451,7 +451,7 @@ $value = include 'my-include.php'; class MyClass { - const MY_CONST = 'value'; // A constant + const MY_CONST = 'value'; // Константа static $staticVar = 'static'; -- cgit v1.2.3 From 0aaa5a232c8112775a23ba706347c31525c92c27 Mon Sep 17 00:00:00 2001 From: Bohdan Shtepan Date: Wed, 6 Apr 2016 03:07:54 +0300 Subject: Update ru-ru/c++-ru.html.markdown --- ru-ru/c++-ru.html.markdown | 183 ++++++++++++++++++++++----------------------- 1 file changed, 91 insertions(+), 92 deletions(-) (limited to 'ru-ru') diff --git a/ru-ru/c++-ru.html.markdown b/ru-ru/c++-ru.html.markdown index 5137ec1f..0cf580d5 100644 --- a/ru-ru/c++-ru.html.markdown +++ b/ru-ru/c++-ru.html.markdown @@ -21,7 +21,7 @@ C++ - компилируемый, статически типизированн - язык с поддержкой обобщенного программирования Хотя его синтаксис может показаться более трудным или сложным для понимания, чем в более современных языках, -он широко применяется т.к. код написанный на C++ компилируется в набор инструкций, которые могут быть выполнены напрямую +он широко применяется, так как код, написанный на C++, компилируется в набор инструкций, которые могут быть выполнены напрямую процессором. C++ широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (игр). @@ -34,21 +34,21 @@ C++ - компилируемый, статически типизированн // C++ практически представляет собой надмножество C и имеет схожий синтаксис // для объявления переменных, примитивов и функций. -// Также как и в С, точкой входа в программу является функция с именем main, +// Так же, как и в С, точкой входа в программу является функция с именем main, // которая возвращает целочисленное значение. // Это значение является кодом ответа программы. // Смотрите https://goo.gl/JYGKyv для более подробной информации. int main(int argc, char** argv) { - // Аргументы командной строки переданные в программу хранятся в переменных - // argc и argv, также как и в C. + // Аргументы командной строки, переданные в программу, хранятся в переменных + // argc и argv, так же, как и в C. // argc указывает на количество аргументов, - // а argv является масивом C-подобных строк (char*), который непосредсвенно + // а argv является массивом C-подобных строк (char*), который непосредсвенно // содержит аргументы. // Первым аргументом всегда передается имя программы. - // argc и argv могут быть опущены если вы не планируете работать с аругментамы + // argc и argv могут быть опущены, если вы не планируете работать с аругментами // коммандной строки. - // Тогда сигнатура функции будет иметь следующий вид int main() + // Тогда сигнатура функции будет иметь следующий вид: int main() // Возвращаемое значение 0 указывает на успешное завершение программы. return 0; @@ -56,17 +56,17 @@ int main(int argc, char** argv) // Тем не менее, C++ имеет свои отличия: -// В C++, символьные литералы являются символами. +// В C++ символьные литералы имеют тип char. sizeof('c') == sizeof(char) == 1 -// В С, символьные литералы - целые числа. +// В C символьные литералы - целые числа. sizeof('c') == sizeof(int) -// C++ имеет строго прототипирование. +// C++ имеет строгое прототипирование. void func(); // функция, которая не принимает аргументов. -// In C +// В языке C void func(); // функция, которая может принять сколько угодно аргументов. // Использование nullptr вместо NULL в C++. @@ -124,7 +124,7 @@ int main() doSomethingWithInts(20, 5); // a = 20, b = 5 } -// Аргументы по умолчанию должен быть в конце списка аргументов. +// Аргументы по умолчанию должны быть в конце списка аргументов. void invalidDeclaration(int a = 1, int b) // Ошибка! { @@ -162,9 +162,9 @@ void foo() int main() { - // Включает все функци с пространства имен Second в текущую область видимости. + // Включает все функци из пространства имен Second в текущую область видимости. // Обратите внимание, что простой вызов foo() больше не работает, - // так как теперь не ясно вызываем ли мы foo с пространства имен Second или + // так как теперь не ясно, вызываем ли мы foo из пространства имен Second, или // из глобальной области видимости. using namespace Second; @@ -174,11 +174,11 @@ int main() } /////////////// -// Ввод/Вывод +// Ввод и вывод /////////////// -// Вводи и вывод в C++ использует потоки -// cin, cout и cerr предоставлнеы методами stdin, stdout и stderr. +// Ввод и вывод в C++ использует потоки +// cin, cout и cerr представляют потоки stdin, stdout и stderr. // << - оператор вставки, >> - оператор извлечения. #include // Включение файла для работы с потоками Ввода\Вывода. @@ -189,7 +189,7 @@ int main() { int myInt; - // Выводит stdout (или терминал\экран) + // Выводит в stdout (или в терминал/на экран) cout << "Enter your favorite number:\n"; // Принимает ввод cin >> myInt; @@ -208,7 +208,7 @@ int main() // Строки в C++ являются объектами и имеют много функций-членов. #include -using namespace std; // Строки также доступны в пространстве имен std (стандартная библиотек) +using namespace std; // Строки также доступны в пространстве имен std (стандартная библиотека) string myString = "Hello"; string myOtherString = " World"; @@ -227,7 +227,7 @@ cout << myString; // "Hello Dog" // Ссылки ///////////// -// В добавок к указателям доступных в C, +// Кроме указателей, доступных в C, // C++ имеет _ссылки_. // Это такой тип указателя, который не может быть переназначен после инициализации // и не может иметь значения null. @@ -241,11 +241,11 @@ string foo = "I am foo"; string bar = "I am bar"; -string& fooRef = foo; // Здесь создается указатель на foo. +string& fooRef = foo; // Здесь создается ссылка на foo. fooRef += ". Hi!"; // Изменяет foo по ссылке cout << fooRef; // Печатает "I am foo. Hi!" -// Не переназначает "fooRef". Это тоже самое как "foo = bar", и +// Не переназначает "fooRef". Это то же самое, что и "foo = bar", и // foo == "I am bar" // после этой строчки. cout << &fooRef << endl; // Печатает адрес foo @@ -256,31 +256,31 @@ cout << fooRef; // Печатает "I am bar" // Адрес fooRef остается тем же, то есть он по-прежнему ссылается на foo. -const string& barRef = bar; // Создает const со ссылкой на bar. -// Также как и C, значения const (и указателей и ссылок) не могут быть изменены. -barRef += ". Hi!"; // Ошибка, указатель const не может быть изменен. +const string& barRef = bar; // Создает константную ссылку. +// Так же, как и в C, константные значения (а также указатели и ссылки) не могут быть изменены. +barRef += ". Hi!"; // Ошибка, константная ссылка не может быть изменена. -// Обходной путь: Прежде чем мы рассмотрим указатели более детально, нам нужно ознакомится -// с концепцией известной как "временный объект". Представьте, что мы имеем следующий код +// Обходной путь: Прежде чем мы рассмотрим указатели более детально, нам нужно ознакомиться +// с концепцией, известной как "временный объект". Представьте, что мы имеем следующий код string tempObjectFun() { ... } string retVal = tempObjectFun(); -// Вот что на самом деле происходит во второй строе: +// Вот что на самом деле происходит во второй строке: // - tempObjectFun возвращает строковый объект -// - с возвращаемого объекта создается новая строка в качестве аргумента конструктору +// - из возвращаемого объекта создается новая строка в качестве аргумента конструктору // - возвращаемый объект уничтожается -// Возвращаемый объект называется временным объектом. Временные объекты создаются +// Возвращаемый объект называется временным объектом. Временные объекты создаются, // когда функция возвращает объект, и уничтожаются в конце выполнения обрамляющего // выражения (По крайней мере, так это описывает спецификация, хотя компиляторы могут // изменять это поведение. Для более подробной информации смотрите "оптимизация -// возвращаемого значения". Таким образом в этом коде: +// возвращаемого значения".) Таким образом в этом коде: foo(bar(tempObjectFun())) -// предполагая, что foo и bar существуют, объект возвращаемый tempObjectFun передается +// предполагая, что foo и bar существуют, объект, возвращаемый tempObjectFun, передается // в bar, и уничтожается перед вызовом foo. // Возвращаемся к указателям. Исключением для правила "в конце выполнения обрамляющего -// выражения" является временный объект привязанный к ссылке const, в этом случае +// выражения" является временный объект, привязанный к ссылке const, в этом случае // его жизненный цикл продлевается до текущей области видимости: void constReferenceTempObjectFun() { @@ -290,7 +290,7 @@ void constReferenceTempObjectFun() { } // В C++11 предоставлен еще один тип ссылок специально для временных объектов. -// objects. Вы не можете объявить переменную этого типа, но он имеет приоритет в +// objects. Вы не можете объявить переменную этого типа, но он имеет приоритет // в резолюции перегрузки: void someFun(string& s) { ... } // Обычная ссылка @@ -304,7 +304,7 @@ someFun(tempObjectFun()); // Выполняет версию с временн basic_string(const basic_string& other); basic_string(basic_string&& other); -// Идея в том, если мы конструируем новую строку из временного объекта (который +// Идея в том, что если мы конструируем новую строку из временного объекта (который // так или иначе будет уничтожен), мы можем использовать более эффективный конструктор, // который "спасает" части этой временной строки. Эта концепция была названа // "move semantics". @@ -313,7 +313,7 @@ basic_string(basic_string&& other); // Перечисления ///////////////////// -// Перечисления - способ объявления констант и установки их значений в основном +// Перечисления - способ объявления констант и установки их значений, в основном // использующийся для упрощения чтения кода. enum ECarTypes { @@ -346,7 +346,7 @@ void WriteByteToFile(uint8_t InputValue) void WritePreferredCarTypeToFile(ECarTypes InputCarType) { - // Перечисление неявно преобразуется в uint8_t из-за раннее объявленного + // Перечисление неявно преобразуется в uint8_t из-за ранее объявленного // типа перечисления. WriteByteToFile(InputCarType); } @@ -384,7 +384,7 @@ void WritePreferredCarTypeToFile(ECarTypes InputCarType) // Объявление класса. // Обычно классы объявляют в заголовочном (.h или .hpp) файле. class Dog { - // Переменный-члены и функции являются частными по умолчанию. + // Переменные-члены и функции являются приватными по умолчанию. std::string name; int weight; @@ -406,27 +406,26 @@ public: // Функции, которые не изменяют состояние объекта, // должны быть помечены как const. - // Это позволяет вызывать их если дана const ссылка на объект. - // Обратите внимание, функции должны быть явно объявлены как _virtual_ + // Это позволяет вызывать их, если дана const ссылка на объект. + // Обратите внимание, функции должны быть явно объявлены как _virtual_, // если вы хотите перегрузить их в производных классах. - // Функции не являются виртуальными по умолчания для повышения производительности. + // Функции не являются виртуальными по умолчанию для повышения производительности. virtual void print() const; - // Такде функции могут быть определены внутри тела класса. + // Также функции могут быть определены внутри тела класса. // Функции, определенные следующим образом, автоматически встроены. void bark() const { std::cout << name << " barks!\n"; } // Наряду с конструкторами, в C++ есть деструкторы. - // Они вызываются, когда объект удаляется или выпадает с области видимости. - // Это активирует мощную парадигму программирования известную как RAII + // Они вызываются, когда объект удаляется или выпадает из области видимости. + // Это активирует мощную парадигму программирования, известную как RAII // (смотрите ниже) // Деструктор должен быть виртуальным, если класс будет производным. - // Если он не виртуальный, тогда деструктор производного класса не будет вызван + // Если он не виртуальный, тогда деструктор производного класса не будет вызван, // если объект удален по ссылке или указателю базового класса. - // or pointer. virtual ~Dog(); -}; // Определение класса должно завершатся точкой с запятой. +}; // Определение класса должно завершаться точкой с запятой. // Функции-члены класса, как правило, реализуются в .cpp файлах. Dog::Dog() @@ -468,7 +467,7 @@ int main() { // Интерфейсы: // Этот класс наследует все открытые и защищенные члены класса Dog -// также как и все закрытые, но не может непосредственно получить доступ к закрытым +// так же, как и все закрытые, но не может непосредственно получить доступ к закрытым // членам\методам без открытых или защищенных методов для этого. class OwnedDog : public Dog { @@ -477,7 +476,7 @@ class OwnedDog : public Dog { // Переопределяем поведение функции печати для всех OwnedDog. Смотрите // https://goo.gl/3kuH2x для боле общего введения, если вы не знакомы // с концепцией полиморфизма подтипов (включения). - // Ключевое слово override является необязательным, но указывает что метод + // Ключевое слово override является необязательным, но указывает, что метод // на самом деле перегружается в базовом классе. void print() const override; @@ -527,9 +526,9 @@ public: Point (double a, double b) : x(a), y(b) - { /* Ничего не делайте кроме инициализации значений */ } + { /* Ничего не делайте, кроме инициализации значений */ } - // Перегружаем оперот +. + // Перегружаем оператор +. Point operator+(const Point& rhs) const; // Перегружаем оператор +=. @@ -568,9 +567,9 @@ int main () { ///////////////////// // Шаблоны в С++, в основном, используются для обобщенного программирования, хотя -// они гораздо более мощны чем дженерики в других языках. Они также поддерживают +// они гораздо более мощны, чем дженерики в других языках. Они также поддерживают // явные, частные и функциональные типы классов; на самом деле, они являются -// тьюринг-полным языком встроенным в C++! +// тьюринг-полным языком, встроенным в C++! // Мы начнем с наиболее распространенного типа обобщенного программирования. Чтобы // определить класс или функцию, которая принимает параметр типа: @@ -581,9 +580,9 @@ public: void insert(const T&) { ... } }; -// Во время компиляции, компилятор фактически генерирует копии каждого шаблона -// с замещенными параметрами, по-этому полное определение класса должно присутствовать -// при каждом вызове. Именно по-этому классы шаблонов полностью определены в +// Во время компиляции компилятор фактически генерирует копии каждого шаблона +// с замещенными параметрами, поэтому полное определение класса должно присутствовать +// при каждом вызове. Именно поэтому классы шаблонов полностью определены в // заголовочных файлах. // Чтобы создать экземпляр класса шаблона на стеке: @@ -597,11 +596,11 @@ Box > boxOfBox; boxOfBox.insert(intBox); // Вплоть до С++11, вы должны были ставить пробел между двумя символами '>', иначе '>>' -// принимался парсером, как оператор правого сдвига. +// принимался парсером, как оператор сдвига вправо. // Иногда вы можете увидеть // template -// вместо этого. В этом случае, ключевые слова 'class' и 'typename' _в основном_ +// вместо этого. В этом случае ключевые слова 'class' и 'typename' _в основном_ // взаимозаменяемыми. Для более подробной информации смотрите // http://en.wikipedia.org/wiki/Typename // (да-да, это ключевое слово имеет собственную страничку на вики). @@ -616,11 +615,11 @@ void barkThreeTimes(const T& input) } // Обратите внимание, что здесь ничего не указано о типе параметра. Компилятор -// будет генерировать и затем проверять тип каждый вызов шаблона, по-этому +// будет генерировать и затем проверять на тип каждый вызов шаблона, поэтому // данная функция работает с любым типом 'T', который имеет метод 'bark'. Dog fluffy; -fluffy.setName("Fluffy") +fluffy.setName("Fluffy"); barkThreeTimes(fluffy); // Печатает "Fluffy barks" три раза. //Параметры шаблона не должны быть классами: @@ -652,20 +651,20 @@ printMessage<10>(); // Печатает "Learn C++ faster in only 10 minutes!" #include #include -// Все исключения брошены внутри блока _try_ могут быть пойманы в последующем блоке +// Все исключения, брошенные в блоке _try_ могут быть пойманы в последующем блоке // _catch_. try { // Не выделяйте память в куче для исключений с помощью ключевого слова _new_. throw std::runtime_error("A problem occurred"); } -// Поймайте исключение по константной ссылке, если они являются объектами +// Поймайте исключение по константной ссылке, если оно является объектом catch (const std::exception& ex) { std::cout << ex.what(); } -// Ловит любое исключение не пойманное предыдущим блоком _catch_ +// Ловит любое исключение, не пойманное предыдущим блоком _catch_ catch (...) { std::cout << "Unknown exception caught"; @@ -681,7 +680,7 @@ catch (...) // некоторого ресурса неразрывно совмещается с инициализацией, а освобождение - // с уничтожением объекта. -// Чтобы понять на сколько это полезно, +// Чтобы понять, на сколько это полезно, // рассмотрим функцию, которая использует обработчик файлов в С: void doSomethingWithAFile(const char* filename) { @@ -695,31 +694,31 @@ void doSomethingWithAFile(const char* filename) fclose(fh); // Закрываем обработчик файла. } -// К сожалению, вещи быстро осложняется обработкой ошибок. -// Предположим fopen может потерпеть неудачу, тогда doSomethingWithTheFile и -// doSomethingElseWithIt вернут коды ошибок если потерпят неудачу. +// К сожалению, вещи быстро осложняются обработкой ошибок. +// Предположим, fopen может потерпеть неудачу, тогда doSomethingWithTheFile и +// doSomethingElseWithIt вернут коды ошибок, если потерпят неудачу. // (Исключения являются предпочтительным способом обработки ошибок, // но некоторые программисты, особенно те, кто имеет большой опыт работы с С, // не согласны с аргументами о полезности исключений). // Теперь мы должны проверить каждый вызов на наличие ошибок и закрыть обработчик -// файла если таковы есть. +// файла, если он есть. bool doSomethingWithAFile(const char* filename) { FILE* fh = fopen(filename, "r"); // Открывает файл в режиме чтения - if (fh == nullptr) // В случае неудачи возвращаемый указатель принимает null. - return false; // Сообщает об неудаче вызывающему. + if (fh == nullptr) // В случае неудачи возвращаемый указатель принимает значение null. + return false; // Сообщает о неудаче вызывающему. // Предположим, каждая функция возвращает false в случае неудачи if (!doSomethingWithTheFile(fh)) { - fclose(fh); // Закрываем обработчик файл чтобы не было утечек + fclose(fh); // Закрываем обработчик файла, чтобы не было утечек return false; // Сообщает об ошибке. } if (!doSomethingElseWithIt(fh)) { - fclose(fh); // Закрываем обработчик файл чтобы не было утечек + fclose(fh); // Закрываем обработчик файла, чтобы не было утечек return false; // Сообщает об ошибке. } - fclose(fh); // Закрываем обработчик файл чтобы не было утечек + fclose(fh); // Закрываем обработчик файла, чтобы не было утечек return true; // Указывает на успех } @@ -736,7 +735,7 @@ bool doSomethingWithAFile(const char* filename) if (!doSomethingElseWithIt(fh)) goto failure; - fclose(fh); // Close the file + fclose(fh); // Закрываем файл. return true; // Указывает на успех failure: @@ -761,12 +760,12 @@ void doSomethingWithAFile(const char* filename) throw; // Затем повторно бросает исключение. } - fclose(fh); // Close the file + fclose(fh); // Закрываем файл. // Успех } // Сравните это с использованием класса потока файла (fstream) в С++, который -// использует свой деструктор чтобы закрыть файл. Еще раз взгляните выше, +// использует свой деструктор, чтобы закрыть файл. Еще раз взгляните выше, // деструктор вызывается автоматически, когда объект выпадает из области видимости. void doSomethingWithAFile(const std::string& filename) { @@ -781,26 +780,26 @@ void doSomethingWithAFile(const std::string& filename) // Это имеет _огромнейшие_ преимущества: // 1. Неважно, что произойдет, -// ресурсы (в данном случае обработчик файлов) будут очищены. -// После того, как вы правильно напишите деструктор, -// Больше будет _не возможно_ закрыть обработчик файлов или допустить утечку. +// ресурсы (в данном случае дескриптор файла) будут очищены. +// После того, как вы правильно напишете деструктор, +// Больше будет _невозможно_ закрыть обработчик файлов или допустить утечку. // 2. Обратите внимание, что код намного проще. -// Деструктор закрывает файловый поток "за кулисами" и вам больше не нужно об -// этом беспокоится. +// Деструктор закрывает файловый поток "за кулисами", и вам больше не нужно об +// этом беспокоиться. // 3. Код устойчив к исключениям. -// Исключение может быть брошено в любом месте в функции и это никак не повлияет +// Исключение может быть брошено в любом месте в функции, и это никак не повлияет // на очистку. // Весь идиоматический код на С++ широко использует RAII для всех ресурсов. -// Дополнительные примеры включат +// Дополнительные примеры включат: // - Использование памяти unique_ptr и shared_ptr // - Контейнеры - стандартная библиотека связанных списков, векторы -// (т.е. самоизменяемые массивы), хэш-карты и все остальное автоматически -// уничтожается сразу-же, когда выходит за пределы области видимости. -// - Ипользование мютексов lock_guard и unique_lock +// (т.е. самоизменяемые массивы), хэш-таблицы и все остальное автоматически +// уничтожается сразу же, когда выходит за пределы области видимости. +// - Ипользование мьютексов lock_guard и unique_lock // Контейнеры с пользовательскими классами в качестве ключей требуют -// функций-компаратор в самом объекте или как указатель на функцию. Примитивы +// сравнивающих функций в самом объекте или как указатель на функцию. Примитивы // имеют компараторы по умолчанию, но вы можете перегрузить их. class Foo { public: @@ -822,7 +821,7 @@ fooMap.find(Foo(1)); //true // Веселые вещи ///////////////////// -// Аспекты С++, которые могут быть удивительными для новичком (и даже для некоторых +// Аспекты С++, которые могут быть удивительными для новичков (и даже для некоторых // ветеранов). Этот раздел, к сожалению, очень неполон. С++ является одним из самых // простых языков, где очень легко выстрелить себе в ногу. @@ -838,7 +837,7 @@ class FooSub : public Foo { // 0 == false == NULL (в основном)! bool* pt = new bool; *pt = 0; // Устанавливает значение указателя 'pt' в false. -pt = 0; // Устанавливает значение 'pt' в нулевой указатель. Обе линии проходят +pt = 0; // Устанавливает значение 'pt' в нулевой указатель. Обе строки проходят // компиляцию без ошибок. // nullptr приходит на помощь: @@ -875,17 +874,17 @@ vector v; for (int i = 0; i < 10; ++i) v.push_back(Foo()); -// В слудующей точке размер v устанавливается в 0, но деструктор не вызывается +// В следующей точке размер v устанавливается в 0, но деструктор не вызывается // и не происходит очистка ресурсов! v.empty(); v.push_back(Foo()); // Новые значения копируются в первый вставленный Foo -// Настоящие уничтожение всех значений v. Смотрите раздел о временном объекте +// Настоящее уничтожение всех значений v. Смотрите раздел о временном объекте // для объяснения того, как это работает. v.swap(vector()); ``` -Дальнейшее чтение: +## Дальнейшее чтение: Наиболее полное и обновленное руководство по С++ можно найти на -- cgit v1.2.3 From edbff9cedf61cf89d270a9fe84ba678c72e11202 Mon Sep 17 00:00:00 2001 From: Konstantin Shirokov Date: Sun, 18 Sep 2016 19:32:17 +0100 Subject: [javascript/ru] function body is missed (#2377) --- ru-ru/javascript-ru.html.markdown | 1 + 1 file changed, 1 insertion(+) (limited to 'ru-ru') diff --git a/ru-ru/javascript-ru.html.markdown b/ru-ru/javascript-ru.html.markdown index 54499f46..1f1ffce6 100644 --- a/ru-ru/javascript-ru.html.markdown +++ b/ru-ru/javascript-ru.html.markdown @@ -359,6 +359,7 @@ myFunc(); // = undefined // И наоборот, функция может быть присвоена объекту и получать доступ к нему // через this, даже если она не была прикреплена к нему при объявлении. var myOtherFunc = function() { + return this.myString.toUpperCase(); } myObj.myOtherFunc = myOtherFunc; myObj.myOtherFunc(); // = "ПРИВЕТ, МИР!" -- cgit v1.2.3 From a8704d313b8dcb97ba105da474293ad0d6adf9dd Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 1 Oct 2016 23:32:35 +0300 Subject: [binary-search/ru] Binary Search Russian translation (Upd) (#2394) * Binary Search Russian translation * Contributors list updated --- ru-ru/binary-search-ru.html.markdown | 63 ++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 ru-ru/binary-search-ru.html.markdown (limited to 'ru-ru') diff --git a/ru-ru/binary-search-ru.html.markdown b/ru-ru/binary-search-ru.html.markdown new file mode 100644 index 00000000..c68a0850 --- /dev/null +++ b/ru-ru/binary-search-ru.html.markdown @@ -0,0 +1,63 @@ +--- +category: Algorithms & Data Structures +name: Binary Search +contributors: + - ["Abhishek Jaisingh", "http://github.com/abhishekjiitr"] +translators: + - ["Evan K.", "https://github.com/justblah"] +--- + +# Двоичный (бинарный) поиск + +## Зачем использовать двоичный поиск? + +Поиск является одной из главных проблем в области вычислительной техники. На сегодняшний день осуществляется более одного триллиона поисковых запросов в год, поэтому нам нужны алгоритмы, которые могут делать это очень быстро. Двоичный поиск является одним из фундаментальных алгоритмов в информатике. Для его изучения мы освоим теорию, а затем используем её для реализации алгоритма. + +## Вступление + +Самый простой вариант поиска – линейный поиск, но этот подход занимает много времени, и растет линейно, пропорционально набору данных. Пример реализации – начинаем с крайнего левого элемента массива S, один за другим сравниваем искомое значение X с каждым элементом массива S, если X совпадает с элементом S, возвращаем индекс. Если X не совпадает ни с одним из элементов массива S, возвращаем -1. + +``` +Линейный поиск: O (n) Линейная сложность + +Двоичный поиск: O ( log(n) ) Логарифмическая сложность + +``` +``` +def search(arr, x): + + for i in range(len(arr)): + + if arr[i] == x: + return i + + return -1 + +``` + +## Алгоритм двоичного поиска + +Для корректной работы двоичного поиска набор данных для поиска должен быть отсортирован (в любом порядке). + +### Алгоритм + +``` +Главная идея двоичного поиска заключается в использовании информации о том, что массив уже отсортирован, +что и позволяет упростить сложность алгоритма до O(Logn). Мы попросту отбрасываем половину элементов набора сразу после одного сравнения. +1) Сравнить X с элементом в середине набора S. +2) Если X равен элементу в середине - возвращаем индекс среднего элемента. +3) Если значение X больше, чем средний элемент набора, значит X находится в правой части набора. Повторяем алгоритм для правой половины набора. +4) В противном случае (X меньше) повторяем алгоритм для левой половины набора. +Это и есть рекурсивная реализация двоичного поиска. + +``` + +### На заметку + +Существует и другая форма двоичного поиска, которая можеть быть полезна. + +## На почитать + +* [Проектирование, реализация и примеры](https://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA) +* [Описание алгоритма ИТМО](http://neerc.ifmo.ru/wiki/index.php?title=%D0%A6%D0%B5%D0%BB%D0%BE%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B4%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA) +* [Ошибки при реализации бинарного поиска](https://habrahabr.ru/post/146228/) -- cgit v1.2.3 From 9234c9fea4d2db040e73def518117f4135d71940 Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 1 Oct 2016 23:33:04 +0300 Subject: Update Swift pre-decrement syntax to match v3.0 (#2395) --- ru-ru/swift-ru.html.markdown | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'ru-ru') diff --git a/ru-ru/swift-ru.html.markdown b/ru-ru/swift-ru.html.markdown index 77987bb3..05f4936c 100644 --- a/ru-ru/swift-ru.html.markdown +++ b/ru-ru/swift-ru.html.markdown @@ -81,7 +81,7 @@ if someOptionalString != nil { if someOptionalString!.hasPrefix("opt") { println("содержит префикс") } - + let empty = someOptionalString?.isEmpty } someOptionalString = nil @@ -107,7 +107,7 @@ anyObjectVar = "Изменять значение на строку не явл /* Комментируйте здесь - + /* Вложенные комментарии тоже поддерживаются */ @@ -308,7 +308,7 @@ print(numbers) // [3, 6, 18] // Структуры и классы имеют очень похожие характеристики struct NamesTable { let names = [String]() - + // Пользовательский индекс subscript(index: Int) -> String { return names[index] @@ -339,7 +339,7 @@ public class Shape { internal class Rect: Shape { var sideLength: Int = 1 - + // Пользовательский сеттер и геттер private var perimeter: Int { get { @@ -350,12 +350,12 @@ internal class Rect: Shape { sideLength = newValue / 4 } } - + // Ленивая загрузка свойства // свойство subShape остается равным nil (неинициализированным), // пока не вызовется геттер lazy var subShape = Rect(sideLength: 4) - + // Если вам не нужны пользовательские геттеры и сеттеры, // но все же хотите запустить код перед и после вызовов геттера или сеттера // свойств, вы можете использовать `willSet` и `didSet` @@ -365,19 +365,19 @@ internal class Rect: Shape { print(someIdentifier) } } - + init(sideLength: Int) { self.sideLength = sideLength // последним всегда вызывается super.init, когда init с параметрами super.init() } - + func shrink() { if sideLength > 0 { - --sideLength + sideLength -= 1 } } - + override func getArea() -> Int { return sideLength * sideLength } @@ -409,13 +409,13 @@ class Circle: Shape { override func getArea() -> Int { return 3 * radius * radius } - + // Поместите постфиксный знак вопроса после `init` - это и будет опциональная инициализация, // которая может вернуть nil init?(radius: Int) { self.radius = radius super.init() - + if radius <= 0 { return nil } @@ -469,7 +469,7 @@ enum Furniture { case Desk(height: Int) // Связать с типами String и Int case Chair(String, Int) - + func description() -> String { switch self { case .Desk(let height): @@ -508,7 +508,7 @@ protocol ShapeGenerator { class MyShape: Rect { var delegate: TransformShape? - + func grow() { sideLength += 2 // Размещайте знак вопроса перед опционным свойством, методом @@ -542,7 +542,7 @@ extension Int { var customProperty: String { return "Это \(self)" } - + func multiplyBy(num: Int) -> Int { return num * self } -- cgit v1.2.3 From 52ff7917d646488bb7e6def8f0f29a0f45d40206 Mon Sep 17 00:00:00 2001 From: shrz Date: Sun, 2 Oct 2016 23:51:09 +0300 Subject: [PHP/ru] Update russian translation for PHP. (#2403) --- ru-ru/php-ru.html.markdown | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'ru-ru') diff --git a/ru-ru/php-ru.html.markdown b/ru-ru/php-ru.html.markdown index 42c4d360..b5feb105 100644 --- a/ru-ru/php-ru.html.markdown +++ b/ru-ru/php-ru.html.markdown @@ -58,7 +58,8 @@ $int1 = 12; // => 12 $int2 = -12; // => -12 $int3 = 012; // => 10 (ведущий 0 обозначает восьмеричное число) $int4 = 0x0F; // => 15 (ведущие символы 0x означают шестнадцатеричное число) - +// Двоичная запись integer доступна начиная с PHP 5.4.0. +$int5 = 0b11111111; // 255 (0b в начале означает двоичное число) // Дробные числа $float = 1.234; $float = 1.2e3; @@ -86,8 +87,9 @@ $dbl_quotes = "This is a $sgl_quotes."; // => 'This is a $String.' // Специальные (escape) символы работают только в двойных кавычках $escaped = "This contains a \t tab character."; $unescaped = 'This just contains a slash and a t: \t'; - // Заключайте переменные в фигурные скобки, если это необходимо +$apples = "I have {$number} apples to eat."; +$oranges = "I have ${number} oranges to eat."; $money = "I have $${number} in the bank."; // Начиная с PHP 5.3, синтаксис nowdocs может использоваться для @@ -140,11 +142,20 @@ $associative = array('One' => 1, 'Two' => 2, 'Three' => 3); $associative = ['One' => 1, 'Two' => 2, 'Three' => 3]; echo $associative['One']; // печатает 1 +// Добавить элемент в ассоциативный массив +$associative['Four'] = 4; + // Список тоже содержит целочисленные ключи $array = ['One', 'Two', 'Three']; echo $array[0]; // => "One" +// Добавить элемент в конец массива +$array[] = 'Four'; +// или +array_push($array, 'Five'); +// удалить элемент из массива +unset($array[3]); /******************************** * Вывод @@ -184,6 +195,10 @@ $y = 0; echo $x; // => 2 echo $z; // => 0 +// Вывести тип и значение переменной в stdout +var_dump($z); // печатает int(0) +// Напечатать переменную в stdout в удобочитаемом виде +print_r($array); // печатает: Array ( [0] => One [1] => Two [2] => Three ) /******************************** * Логические выражения @@ -204,12 +219,21 @@ assert($c > $b); // больше assert($a <= $b); // меньше или равно assert($c >= $d); // больше или равно -// Следующие утверждения истинны, если переменные имеют одинаковый тип. +// Следующие утверждения истинны, если переменные имеют одинаковые тип. assert($c === $d); assert($a !== $d); assert(1 == '1'); assert(1 !== '1'); +// 'Spaceship' оператор (с PHP 7) используется для сравнения двух выражений. +// Возвращает -1, 0 или 1, когда выражение слева меньше, равно или больше +// выражения справа. +$a = 100; +$b = 1000; + +echo $a <=> $a; // 0, выражения равны +echo $a <=> $b; // -1, $a < $b +echo $b <=> $a; // 1, $b > $a // Переменные могут изменять тип в зависимости от их использования. $integer = 1; echo $integer + $integer; // => 2 @@ -265,6 +289,11 @@ if (false) { // Тернарный оператор print (false ? 'Does not get printed' : 'Does'); +// сокращенная запись тернарного оператора с PHP 5.3 +// эквивалентно "$x ? $x : 'Does'" +$x = false; +print($x ?: 'Does'); + $x = 0; if ($x === '0') { print 'Does not print'; -- cgit v1.2.3 From dacc2de3b26ea9c30404a40d0615088204286dd9 Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 3 Oct 2016 00:15:09 +0300 Subject: [qt/ru] Qt Russian translation (#2398) * Qt Russian translation * Keeping code blocks < 80 chars, links language marks added. --- ru-ru/qt-ru.html.markdown | 158 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 ru-ru/qt-ru.html.markdown (limited to 'ru-ru') diff --git a/ru-ru/qt-ru.html.markdown b/ru-ru/qt-ru.html.markdown new file mode 100644 index 00000000..d0a70c9d --- /dev/null +++ b/ru-ru/qt-ru.html.markdown @@ -0,0 +1,158 @@ +--- +category: tool +tool: Qt Framework +language: c++ +filename: learnqt-ru.cpp +contributors: + - ["Aleksey Kholovchuk", "https://github.com/vortexxx192"] +translators: + - ["Evan K.", "https://github.com/justblah"] +lang: ru-ru +--- + +**Qt** является широко известным фреймворком для разработки кросс-платформенного программного обеспечения, которое может быть запущено на различных программно-аппаратных платформах практически без изменений в коде, сохраняя при этом мощность и скорость нативных приложений. Хоть **Qt** и был изначально написан на *C++*, у него есть реализации и на других языках: *PyQt*, *QtRuby*, *PHP-Qt* и т.д. + +**Qt** отлично подходит для создания приложений с графическим пользовательским интерфейсом (GUI). Это руководство о том, как сделать это на *C++*. + +```c++ +/* + * Начнём по-старинке + */ + +// все header файлы импортированные из Qt начинаются с заглавной 'Q' +#include +#include + +int main(int argc, char *argv[]) { + // создаем объект для управления данными приложения + QApplication app(argc, argv); + + // создаем редактируемую строку и отобразим её на экране + QLineEdit lineEdit("Hello world!"); + lineEdit.show(); + + // запускаем цикл для обработки событий (event loop) + return app.exec(); +} +``` + +GUI часть **Qt** полностью состоит из *виджетов* и *связей* между ними. + +[(EN) ПОДРОБНЕЕ О ВИДЖЕТАХ](http://doc.qt.io/qt-5/qtwidgets-index.html) + +```c++ +/* + * В этом примере мы отобразим надпись с кнопкой. + * Надпись будет появляться после нажатия на кнопку. + * + * Код на Qt говорит сам за себя. + */ + +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) { + QApplication app(argc, argv); + + QDialog dialogWindow; + dialogWindow.show(); + + // добавляем вертикальное расположение + QVBoxLayout layout; + dialogWindow.setLayout(&layout); + + QLabel textLabel("Thanks for pressing that button"); + layout.addWidget(&textLabel); + textLabel.hide(); + + QPushButton button("Press me"); + layout.addWidget(&button); + + // отображаем скрытую надпись после нажатия на кнопку + QObject::connect(&button, &QPushButton::pressed, + &textLabel, &QLabel::show); + + return app.exec(); +} +``` +Обратите внимание на метод *QObject::connect*. Этот метод соединяет *СИГНАЛЫ* одного объекта со *СЛОТАМИ* другого. + +**Сигналы** отправляются когда с объектами происходят отпределённые события, например, сигнал *нажатие* отправляется когда пользователь нажимает на объект типа QPushButton. + +**Слоты** это *действия*, которые могут быть выполнены в ответ на полученные сигналы. + +[(EN) ПОДРОБНЕЕ О СЛОТАХ И СИГНАЛАХ](http://doc.qt.io/qt-4.8/signalsandslots.html) + + +Далее рассмотрим, как можно не только использовать стандартные виджеты, но и расширять их поведение с помощью наследования. Давайте создадим кнопку и посчитаем, сколько раз она была нажата. Для этого мы определяем наш собственный класс *CounterLabel*. Он должен быть объявлен в отдельном файле из-за специфической архитектуры Qt. + +```c++ +// counterlabel.hpp + +#ifndef COUNTERLABEL +#define COUNTERLABEL + +#include + +class CounterLabel : public QLabel { + Q_OBJECT // макрос Qt, обязателен для всех виджетов + +public: + CounterLabel() : counter(0) { + setText("Counter has not been increased yet"); // метод QLabel + } + +public slots: + // действие, которое будет вызвано в ответ на нажатие + void increaseCounter() { + setText(QString("Counter value: %1").arg(QString::number(++counter))); + } + +private: + int counter; +}; + +#endif // COUNTERLABEL +``` + +```c++ +// main.cpp +// Почти тоже самое, что и в предыдущем примере + +#include +#include +#include +#include +#include +#include "counterlabel.hpp" + +int main(int argc, char *argv[]) { + QApplication app(argc, argv); + + QDialog dialogWindow; + dialogWindow.show(); + + QVBoxLayout layout; + dialogWindow.setLayout(&layout); + + CounterLabel counterLabel; + layout.addWidget(&counterLabel); + + QPushButton button("Push me once more"); + layout.addWidget(&button); + QObject::connect(&button, &QPushButton::pressed, + &counterLabel, &CounterLabel::increaseCounter); + + return app.exec(); +} +``` + +## На почитать +Это всё! Конечно, фреймворк Qt намного объемнее, чем часть, которая была рассмотрена в этом руководстве, так что будьте готовы читать и практиковаться. + +[(EN) ДОКУМЕНТАЦИЯ](http://wiki.qt.io/Main/ru) + +Удачи! -- cgit v1.2.3 From 907db9f7eeb7f7a12fb73625979261fd46a2eca6 Mon Sep 17 00:00:00 2001 From: _Pavka Date: Mon, 3 Oct 2016 21:34:53 +0300 Subject: [c/ru] C russian grammar error (#2404) * C-ru fix typo * line 308: fix typo --- ru-ru/c-ru.html.markdown | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'ru-ru') diff --git a/ru-ru/c-ru.html.markdown b/ru-ru/c-ru.html.markdown index 5e967181..ab4be57e 100644 --- a/ru-ru/c-ru.html.markdown +++ b/ru-ru/c-ru.html.markdown @@ -145,7 +145,7 @@ int main() { f1 / f2; // => 0.5, плюс-минус погрешность потому что, // цифры с плавающей точкой вычисляются неточно! - // Модуль + // Остаток от деления 11 % 3; // => 2 // Операции сравнения вам уже знакомы, но в Си нет булевого типа. @@ -286,7 +286,7 @@ int main() { // => Напечатает "8, 4" в 64 битной системе // Для того, чтобы получить значение по адресу, напечатайте * перед именем. - // Да, использование * при объявлении указателя и получении значения по адресу + // Да, * используется при объявлении указателя и для получении значения по адресу // немного запутано, но вы привыкнете. printf("%d\n", *px); // => Напечаатет 0, значение перемененной x @@ -305,8 +305,9 @@ int main() { // Объявление указателя на int с адресом массива. int* x_ptr = x_array; // x_ptr сейчас указывает на первый элемент массива (со значением 20). - // Это рабоатет, потому что имя массива возвращает указатель на первый элемент. - // Например, когда массив передаётся в функцию или назначается указателю, он + // Это работает, потому что при обращении к имени массива возвращается + // указатель на первый элемент. + // Например, когда массив передаётся в функцию или присваивается указателю, он // невявно преобразуется в указатель. // Исключения: когда массив является аргументом для оператор '&': int arr[10]; -- cgit v1.2.3 From 0ec3d660e0011a9976a9a56d55aab2e3566824c1 Mon Sep 17 00:00:00 2001 From: Hughes Perreault Date: Sat, 8 Oct 2016 16:04:05 -0400 Subject: line "lang: ru-ru" was missing (#2433) This commit fixes #2416 --- ru-ru/binary-search-ru.html.markdown | 1 + 1 file changed, 1 insertion(+) (limited to 'ru-ru') diff --git a/ru-ru/binary-search-ru.html.markdown b/ru-ru/binary-search-ru.html.markdown index c68a0850..9ed62cb8 100644 --- a/ru-ru/binary-search-ru.html.markdown +++ b/ru-ru/binary-search-ru.html.markdown @@ -5,6 +5,7 @@ contributors: - ["Abhishek Jaisingh", "http://github.com/abhishekjiitr"] translators: - ["Evan K.", "https://github.com/justblah"] +lang: ru-ru --- # Двоичный (бинарный) поиск -- cgit v1.2.3 From a18f6a596eb30059feaa683854511ad1f6da5994 Mon Sep 17 00:00:00 2001 From: Alexey Nazaroff Date: Sat, 8 Oct 2016 23:29:13 +0300 Subject: [swift/ru] Updated code to Swift v.3, added some new sections from english version (#2429) --- ru-ru/swift-ru.html.markdown | 234 +++++++++++++++++++++++++++++++------------ 1 file changed, 172 insertions(+), 62 deletions(-) (limited to 'ru-ru') diff --git a/ru-ru/swift-ru.html.markdown b/ru-ru/swift-ru.html.markdown index 05f4936c..7ff660e1 100644 --- a/ru-ru/swift-ru.html.markdown +++ b/ru-ru/swift-ru.html.markdown @@ -4,9 +4,11 @@ contributors: - ["Grant Timmerman", "http://github.com/grant"] - ["Christopher Bess", "http://github.com/cbess"] - ["Joey Huang", "http://github.com/kamidox"] + - ["Alexey Nazaroff", "http://github.com/rogaven"] filename: learnswift-ru.swift translators: - ["Dmitry Bessonov", "https://github.com/TheDmitry"] + - ["Alexey Nazaroff", "https://github.com/rogaven"] lang: ru-ru --- @@ -21,6 +23,8 @@ Swift - это язык программирования, созданный к Смотрите еще [начальное руководство](https://developer.apple.com/library/prerelease/ios/referencelibrary/GettingStarted/RoadMapiOS/index.html) Apple, которое содержит полное учебное пособие по Swift. ```swift +// Версия Swift: 3.0 + // импорт модуля import UIKit @@ -31,10 +35,14 @@ import UIKit // Xcode поддерживает маркеры, чтобы давать примечания своему коду // и вносить их в список обозревателя (Jump Bar) // MARK: Метка раздела +// MARK: - Метка с разделителем // TODO: Сделайте что-нибудь вскоре // FIXME: Исправьте этот код -println("Привет, мир") +// Начиная со второй версии Swift, println и print объединены в методе print. +// Перенос строки теперь добавляется в конец автоматически. +print("Привет, мир!") // println – теперь просто print +print("Привет, мир!", terminator: "") // вывод текста без переноса строки // переменные (var), значение которых можно изменить после инициализации // константы (let), значение которых нельзя изменить после инициализации @@ -56,12 +64,12 @@ let piText = "Pi = \(π), Pi 2 = \(π * 2)" // Вставка переменны // Сборка особых значений // используя ключ -D сборки конфигурации #if false - println("Не печатается") + print("Не печатается") let buildValue = 3 #else let buildValue = 7 #endif -println("Значение сборки: \(buildValue)") // Значение сборки: 7 +print("Значение сборки: \(buildValue)") // Значение сборки: 7 /* Опционалы - это особенность языка Swift, которая допускает вам сохранять @@ -79,31 +87,41 @@ var someOptionalString2: Optional = "опционал" if someOptionalString != nil { // я не nil if someOptionalString!.hasPrefix("opt") { - println("содержит префикс") + print("содержит префикс") } let empty = someOptionalString?.isEmpty } someOptionalString = nil +/* +Использование ! для доступа к несуществующему опциональному значению генерирует +рантайм ошибку. Всегда проверяйте, что опционал содержит не пустое значение, +перед тем как раскрывать его через !. +*/ + // неявная развертка опциональной переменной var unwrappedString: String! = "Ожидаемое значение." // как и выше, только ! - постфиксный оператор (с еще одним синтаксическим сахаром) var unwrappedString2: ImplicitlyUnwrappedOptional = "Ожидаемое значение." +// If let конструкции - +// If let это специальная конструкция в Swift, которая позволяет проверить Optional +// справа от `=` непустой, и если это так - разворачивает его и присваивает левой части. if let someOptionalStringConstant = someOptionalString { - // имеется некоторое значение, не nil + // имеется некоторое (`Some`) значение, не `nil` if !someOptionalStringConstant.hasPrefix("ok") { // нет такого префикса } } // Swift поддерживает сохранение значения любого типа +// Для этих целей есть два ключевых слова `Any` и `AnyObject` // AnyObject == id -// В отличие от `id` в Objective-C, AnyObject работает с любым значением (Class, -// Int, struct и т.д.) -var anyObjectVar: AnyObject = 7 -anyObjectVar = "Изменять значение на строку не является хорошей практикой, но возможно." +// `Any` же, в отличие от `id` в Objective-C, `Any` работает с любым значением (Class, Int, struct и т.д.) +var anyVar: Any = 7 +anyVar = "Изменять значение на строку не является хорошей практикой, но возможно." +let anyObjectVar: AnyObject = Int(1) as NSNumber /* Комментируйте здесь @@ -129,6 +147,7 @@ shoppingList[1] = "бутылка воды" let emptyArray = [String]() // let == неизменный let emptyArray2 = Array() // как и выше var emptyMutableArray = [String]() // var == изменяемый +var explicitEmptyMutableStringArray: [String] = [] // так же как и выше // Словарь @@ -140,31 +159,39 @@ occupations["Jayne"] = "Связи с общественностью" let emptyDictionary = [String: Float]() // let == неизменный let emptyDictionary2 = Dictionary() // как и выше var emptyMutableDictionary = [String: Float]() // var == изменяемый +var explicitEmptyMutableDictionary: [String: Float] = [:] // то же // // MARK: Поток управления // +// С помощью "," можно указать дополнительные условия для раскрытия +// опциональных значений. +let someNumber = Optional(7) +if let num = someNumber, num > 3 { + print("Больше 3х") +} + // цикл for для массива let myArray = [1, 1, 2, 3, 5] for value in myArray { if value == 1 { - println("Один!") + print("Один!") } else { - println("Не один!") + print("Не один!") } } // цикл for для словаря var dict = ["один": 1, "два": 2] for (key, value) in dict { - println("\(key): \(value)") + print("\(key): \(value)") } // цикл for для диапазона чисел for i in -1...shoppingList.count { - println(i) + print(i) } shoppingList[1...2] = ["бифштекс", "орехи пекан"] // используйте ..< для исключения последнего числа @@ -176,8 +203,8 @@ while i < 1000 { } // цикл do-while -do { - println("привет") +repeat { + print("привет") } while 1 == 2 // Переключатель @@ -204,7 +231,7 @@ default: // обязательный (чтобы предусмотреть вс // Функции являются типом первого класса, т.е. они могут быть вложены в функциях // и могут передаваться между собой -// Функция с документированным заголовком Swift (формат reStructedText) +// Функция с документированным заголовком Swift (формат Swift-модифицированный Markdown) /** Операция приветствия @@ -212,20 +239,20 @@ default: // обязательный (чтобы предусмотреть вс - Маркер в документировании - Еще один маркер в документации - :param: name - это имя - :param: day - это день - :returns: Строка, содержащая значения name и day. + - Parameter name : Это имя + - Parameter day : Это день + - Returns : Строка, содержащая значения name и day. */ func greet(name: String, day: String) -> String { return "Привет \(name), сегодня \(day)." } -greet("Боб", "вторник") +greet(name: "Боб", day: "вторник") // как и выше, кроме обращения параметров функции -func greet2(#requiredName: String, externalParamName localParamName: String) -> String { - return "Привет \(requiredName), сегодня \(localParamName)" +func greet2(name: String, externalParamName localParamName: String) -> String { + return "Привет \(name), сегодня \(localParamName)" } -greet2(requiredName:"Иван", externalParamName: "воскресенье") +greet2(name: "Иван", externalParamName: "Воскресенье") // Функция, которая возвращает множество элементов в кортеже func getGasPrices() -> (Double, Double, Double) { @@ -235,8 +262,31 @@ let pricesTuple = getGasPrices() let price = pricesTuple.2 // 3.79 // Пропускайте значения кортежей с помощью подчеркивания _ let (_, price1, _) = pricesTuple // price1 == 3.69 -println(price1 == pricesTuple.1) // вывод: true -println("Цена газа: \(price)") +print(price1 == pricesTuple.1) // вывод: true +print("Цена газа: \(price)") + +// Именованные параметры кортежа +func getGasPrices2() -> (lowestPrice: Double, highestPrice: Double, midPrice: Double) { + return (1.77, 37.70, 7.37) +} +let pricesTuple2 = getGasPrices2() +let price2 = pricesTuple2.lowestPrice +let (_, price3, _) = pricesTuple2 +print(pricesTuple2.highestPrice == pricesTuple2.1) // вывод: true +print("Самая высокая цена за газ: \(pricesTuple2.highestPrice)") + +// guard утверждения +func testGuard() { + // guards обеспечивают прерывание дальнейшего выполнения функции, + // позволяя держать обработчики ошибок рядом с проверкой условия + // Объявляемая переменная находится в той же области видимости, что и guard. + guard let aNumber = Optional(7) else { + return + } + + print("число равно \(aNumber)") +} +testGuard() // Переменное число аргументов func setup(numbers: Int...) { @@ -246,7 +296,7 @@ func setup(numbers: Int...) { } // Передача и возврат функций -func makeIncrementer() -> (Int -> Int) { +func makeIncrementer() -> ((Int) -> Int) { func addOne(number: Int) -> Int { return 1 + number } @@ -256,15 +306,15 @@ var increment = makeIncrementer() increment(7) // передача по ссылке -func swapTwoInts(inout a: Int, inout b: Int) { +func swapTwoInts(a: inout Int, b: inout Int) { let tempA = a a = b b = tempA } var someIntA = 7 var someIntB = 3 -swapTwoInts(&someIntA, &someIntB) -println(someIntB) // 7 +swapTwoInts(a: &someIntA, b: &someIntB) +print(someIntB) // 7 // @@ -291,13 +341,13 @@ numbers = numbers.map({ number in 3 * number }) print(numbers) // [3, 6, 18] // Хвостовое замыкание -numbers = sorted(numbers) { $0 > $1 } +numbers = numbers.sorted { $0 > $1 } print(numbers) // [18, 6, 3] // Суперсокращение, поскольку оператор < выполняет логический вывод типов -numbers = sorted(numbers, < ) +numbers = numbers.sorted(by: <) print(numbers) // [3, 6, 18] @@ -307,7 +357,7 @@ print(numbers) // [3, 6, 18] // Структуры и классы имеют очень похожие характеристики struct NamesTable { - let names = [String]() + let names: [String] // Пользовательский индекс subscript(index: Int) -> String { @@ -316,9 +366,48 @@ struct NamesTable { } // У структур автогенерируемый (неявно) инициализатор -let namesTable = NamesTable(names: ["Me", "Them"]) +let namesTable = NamesTable(names: ["Иван", "Яков"]) let name = namesTable[1] -println("Name is \(name)") // Name is Them +print("Имя :\(name)") // Имя: Яков + +// +// MARK: Обработка ошибок +// + +// Протокол `Error` используется для перехвата выбрасываемых ошибок +enum MyError: Error { + case BadValue(msg: String) + case ReallyBadValue(msg: String) +} + +// фунции помеченные словом `throws` должны вызываться с помощью `try` +func fakeFetch(value: Int) throws -> String { + guard 7 == value else { + throw MyError.ReallyBadValue(msg: "Действительно плохое значение") + } + + return "тест" +} + +func testTryStuff() { + // предполагается, что не будет выброшено никаких ошибок, + // в противном случае мы получим рантайм исключение + let _ = try! fakeFetch(value: 7) + + // Если возникает ошибка, то выполнение продолжится. Но если значение равно nil, + // то результат будет опционалом + let _ = try? fakeFetch(value: 7) + + do { + // обычно try оператор, позволяющий обработать ошибку в `catch` блоке + try fakeFetch(value: 1) + } catch MyError.BadValue(let msg) { + print("Ошибка: \(msg)") + } catch { + // все остальное + } +} +testTryStuff() // // MARK: Классы @@ -329,7 +418,7 @@ println("Name is \(name)") // Name is Them public class Shape { public func getArea() -> Int { - return 0; + return 0 } } @@ -351,6 +440,11 @@ internal class Rect: Shape { } } + // Вычисляемые свойства должны быть объявлены с помощью `var`, ведь они могут меняться + var smallestSideLength: Int { + return self.sideLength - 1 + } + // Ленивая загрузка свойства // свойство subShape остается равным nil (неинициализированным), // пока не вызовется геттер @@ -400,7 +494,7 @@ let aShape = mySquare as Shape // сравнение экземпляров, в отличие от ==, которая проверяет эквивалентность if mySquare === mySquare { - println("Ага, это mySquare") + print("Ага, это mySquare") } // Опциональная инициализация (init) @@ -423,13 +517,13 @@ class Circle: Shape { } var myCircle = Circle(radius: 1) -println(myCircle?.getArea()) // Optional(3) -println(myCircle!.getArea()) // 3 +print(myCircle?.getArea()) // Optional(3) +print(myCircle!.getArea()) // 3 var myEmptyCircle = Circle(radius: -1) -println(myEmptyCircle?.getArea()) // "nil" +print(myEmptyCircle?.getArea()) // "nil" if let circle = myEmptyCircle { // не будет выполняться, поскольку myEmptyCircle равен nil - println("circle не nil") + print("circle не nil") } @@ -456,12 +550,13 @@ enum Suit { // указывать тип перечисления, когда переменная объявляется явно var suitValue: Suit = .Hearts -// Нецелочисленные перечисления требуют прямого указания значений +// Значения нецелочисленных перечислений должны быть указаны явно +// или могут выводится с помощью функции `rawValue` из имени enum BookName: String { - case John = "Иоанн" + case John case Luke = "Лука" } -println("Имя: \(BookName.John.rawValue)") +print("Имя: \(BookName.John.rawValue)") // Перечисление (enum) со связанными значениями enum Furniture { @@ -481,9 +576,9 @@ enum Furniture { } var desk: Furniture = .Desk(height: 80) -println(desk.description()) // "Письменный стол высотой 80 см." +print(desk.description()) // "Письменный стол высотой 80 см." var chair = Furniture.Chair("Foo", 40) -println(chair.description()) // "Стул марки Foo высотой 40 см." +print(chair.description()) // "Стул марки Foo высотой 40 см." // @@ -500,10 +595,10 @@ protocol ShapeGenerator { } // Протоколы, объявленные с @objc, допускают необязательные функции, -// которые позволяют вам проверять на соответствие +// которые позволяют вам проверять на соответствие. Для функций также необходимо указать @objc @objc protocol TransformShape { - optional func reshaped() - optional func canReshape() -> Bool + @objc optional func reshape() + @objc optional func canReshape() -> Bool } class MyShape: Rect { @@ -511,12 +606,13 @@ class MyShape: Rect { func grow() { sideLength += 2 + // Размещайте знак вопроса перед опционным свойством, методом // или индексом, чтобы не учитывать nil-значение и возвратить nil // вместо выбрасывания ошибки выполнения (т.н. "опционная цепочка") - if let allow = self.delegate?.canReshape?() { + if let reshape = self.delegate?.canReshape?(), reshape { // проверка делегата на выполнение метода - self.delegate?.reshaped?() + self.delegate?.reshape?() } } } @@ -528,14 +624,14 @@ class MyShape: Rect { // `extension`s: Добавляет расширенный функционал к существующему типу -// Класс Square теперь "соответствует" протоколу `Printable` -extension Square: Printable { +// Класс Square теперь "соответствует" протоколу `CustomStringConvertible` +extension Square: CustomStringConvertible { var description: String { return "Площадь: \(self.getArea()) - ID: \(self.identifier)" } } -println("Объект Square: \(mySquare)") +print("Объект Square: \(mySquare)") // Вы также можете расширить встроенные типы extension Int { @@ -548,22 +644,22 @@ extension Int { } } -println(7.customProperty) // "Это 7" -println(14.multiplyBy(3)) // 42 +print(7.customProperty) // "Это 7" +print(14.multiplyBy(num: 3)) // 42 // Обобщения: Подобно языкам Java и C#. Используйте ключевое слово `where`, // чтобы определить условия обобщений. func findIndex(array: [T], valueToFind: T) -> Int? { - for (index, value) in enumerate(array) { + for (index, value) in array.enumerated() { if value == valueToFind { return index } } return nil } -let foundAtIndex = findIndex([1, 2, 3, 4], 3) -println(foundAtIndex == 2) // вывод: true +let foundAtIndex = findIndex(array: [1, 2, 3, 4], valueToFind: 3) +print(foundAtIndex == 2) // вывод: true // Операторы: // Пользовательские операторы могут начинаться с символов: @@ -571,19 +667,33 @@ println(foundAtIndex == 2) // вывод: true // или // Unicode- знаков математики, символов, стрелок, декорации и линий/кубов, // нарисованных символов. -prefix operator !!! {} +prefix operator !!! // Префиксный оператор, который утраивает длину стороны, когда используется -prefix func !!! (inout shape: Square) -> Square { +prefix func !!! (shape: inout Square) -> Square { shape.sideLength *= 3 return shape } // текущее значение -println(mySquare.sideLength) // 4 +print(mySquare.sideLength) // 4 // Используя пользовательский оператор !!!, изменится длина стороны // путем увеличения размера в 3 раза !!!mySquare -println(mySquare.sideLength) // 12 +print(mySquare.sideLength) // 12 + +// Операторы также могут быть обобщенными +infix operator <-> +func <-> (a: inout T, b: inout T) { + let c = a + a = b + b = c +} + +var foo: Float = 10 +var bar: Float = 20 + +foo <-> bar +print("foo это \(foo), bar это \(bar)") // "foo = 20.0, bar = 10.0" ``` -- cgit v1.2.3 From d6f6995ddec59ecb9bb39ed97b0e47a8c19b58a6 Mon Sep 17 00:00:00 2001 From: samcv Date: Sun, 23 Oct 2016 05:19:46 -0700 Subject: Fix for the three tutorials with broken YAML markup, causing them not to be accessible at all or show up in the index (#2497) * Fix typo causing typescript-ru.html.markdown not to parse correctly in the header * Fix typo in markdown-ru.html.markdown causing page not to parse correctly * Oh no! both translator and contributors fields in the header used fullwidth commas instead of normal ones. This fixes processing of this file :) --- ru-ru/markdown-ru.html.markdown | 2 +- ru-ru/typescript-ru.html.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'ru-ru') diff --git a/ru-ru/markdown-ru.html.markdown b/ru-ru/markdown-ru.html.markdown index f71435ea..ff7a0cc3 100644 --- a/ru-ru/markdown-ru.html.markdown +++ b/ru-ru/markdown-ru.html.markdown @@ -5,7 +5,7 @@ contributors: - ["Jacob Ward", "http://github.com/JacobCWard/"] translators: - ["Pirogov Alexey", "http://twitter.com/alex_pir"] - - ["Andre Polykanine", https://github.com/Oire"] + - ["Andre Polykanine", "https://github.com/Oire"] filename: markdown-ru.md lang: ru-ru --- diff --git a/ru-ru/typescript-ru.html.markdown b/ru-ru/typescript-ru.html.markdown index 67b58a38..09bbb2d1 100644 --- a/ru-ru/typescript-ru.html.markdown +++ b/ru-ru/typescript-ru.html.markdown @@ -5,7 +5,7 @@ contributors: - ["Philippe Vlérick", "https://github.com/pvlerick"] translators: - ["Fadil Mamedov", "https://github.com/fadilmamedov"] - - "Andre Polykanine", "https://github.com/Oire"] + - ["Andre Polykanine", "https://github.com/Oire"] filename: learntypescript-ru.ts --- -- cgit v1.2.3 From daea2973e674c679caced1bc743110ca70a41fb3 Mon Sep 17 00:00:00 2001 From: Anton Date: Tue, 25 Oct 2016 23:57:32 +0300 Subject: [vim/ru] Translate Vim doc (#2506) * [vim/ru] Translate Vim doc * Add '(EN)' label to links, and replace Arch wiki link with russian version --- ru-ru/vim-ru.html.markdown | 237 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 237 insertions(+) create mode 100644 ru-ru/vim-ru.html.markdown (limited to 'ru-ru') diff --git a/ru-ru/vim-ru.html.markdown b/ru-ru/vim-ru.html.markdown new file mode 100644 index 00000000..5b7b96e6 --- /dev/null +++ b/ru-ru/vim-ru.html.markdown @@ -0,0 +1,237 @@ +--- +category: tool +tool: vim +contributors: + - ["RadhikaG", "https://github.com/RadhikaG"] +translators: + - ["Anton Slukovskiy", "https://github.com/slukovskiy"] +filename: LearnVim-ru.txt +lang: ru-ru +--- + +[Vim](www.vim.org) +(Vi IMproved) это клон полулярного текстового редактора для Unix. Он разработан +с целью повышения скорости и продуктивности и повсеместно используется в +большинство Юникс-подобных систем. В нем имеется множество клавиатурных +сочетаний для быстрой навигации к определенным точкам в файле и быстрого +редактирования. + +## Основы навигации в vim + +``` + vim # Открыть в vim + :q # Выйти из vim + :w # Сохранить текущий файл + :wq # Сохранить и выйти + :q! # Выйти из vim не сохраняя файл + + :x # Сохранить файл и выйти из vim, короткая версия :wq + + u # Отмена последней команды + CTRL+R # Отмена отмены + + h # Переместить курсор на один символ влево + j # Переместить курсор на один символ вниз + k # Переместить курсор на один символ вверх + l # Переместить курсор на один символ вправо + + # Перемещение по строке + + 0 # Переместить курсор к началу строки + $ # Переместить курсор к концу строки + ^ # Переместить курсор к первому непустому символу в строке + + # Поиск в тексте + + / # Подсветить все вхождения в тексте после курсора + ? # Подсветить все вхождения в тексте до курсора + n # Передвигает курсор к следующему вхождения искомого слова + N # Передвигает курсор к предыдущему вхождения искомого слова + + :%s/foo/bar/g # Меняет 'foo' на 'bar' во всем файле + :s/foo/bar/g # Меняет 'foo' на 'bar' на текущей строке + + # Переходы к символу + + f # Перенести курсор к + t # Перенести курсор вперед и остановиться прямо перед + + # Например, + f< # Перести курсор и остановиться на < + t< # Перенсти курсор и остановиться прямо перед < + + # Перемещение по словам + + w # Переместиться вперед на одно слово + b # Перенеститься назад на одно слово + e # Перейти к концу текущего слова + + # Другие команды для передвижения по тексту + + gg # Перейти к началу файла + G # Перейти к концу файла + :NUM # Перейти к строке под номером NUM (NUM может быть любым числом) + H # Переместить курсор к верхнему краю экрана + M # Переместить курсор к середине экрана + L # Переместить курсор к нижнему краю экрана +``` + +## Режимы: + +Vim основывается на концепте **режимов**. + +Командный режим - vim запускается в этом режиме по-умолчанию, используется для +навигации и ввода комманд +Режим ввода - используется для внесения изменений в файле +Визуальный режим - используется для подсветки текста и выполнения операций над ним +Режим командной строки - используется для ввода команд в нижнем углу экрана после символа ':' + +``` + i # Переводит vim в режим вставки перед позицией курсора + a # Переводит vim в режим вставки после позиции курсора + v # Переводит vim в визуальный режим + : # Переводит vim в режим командной строки + # Выходит из любого режима в котором вы находитесь в командный режим + + # Копирование и вставка текста + + y # Скопировать выделенное + yy # Скопировать текущую строку + d # Удалить выделенное + dd # Удалить текущую строку + p # Вставить скопированный текст после текущей позиции курсора + P # Вставить скопированный текст перед текущей позицией курсора + x # Удалить символ под текущей позицией курсора +``` + +## 'Грамматика' vim + +Vim можно рассматривать как набор команд в формате 'Глагол-Модификатор-Существительное', где: + +Глагол - ваше действие +Модификатор - то как вы его выполняете +Существительное - объект над которым вы его выполняете + +Несколько важных пример 'Глаголов', 'Модификаторов', и 'Существительных': + +``` + # 'Глаголы' + + d # Удалить + c # Изменить + y # Скопировать + v # Визуально выделить + + # 'Модификаторы' + + i # Внутри + a # Снаружи + NUM # Число + f # Ищет что-то и останавливается на нем + t # Ищет что-то и останавливается перед ним + / # Ищет строку после курсора + ? # Ищет строку перед курсором + + # 'Существительные' + + w # Слово + s # Предложение + p # Параграф + b # Блок + + # Образцы 'предложений' или команд + + d2w # Удалить 2 слова + cis # Изменить объемлющее предложение + yip # Скопировать объемлющий параграф + ct< # Изменяет текст от курсора до следующей открывающей скобки + d$ # Удалить все от положения курсора до конца строки +``` + +## Некоторые сокращения и хитрости + + +``` + > # Сдвинуть выделенное на один отступ вправо + < # Сдвинуть выделенное на один отступ влево + :earlier 15m # Возвращает документ к состоянию в котором он был 15 минут назад + :later 15m # Отменяет предыдущую команду + ddp # Меняет позиции последовательных строк, сначала dd затем p + . # Повторяет предыдущее действие +``` + +## Макросы + +Макросы это просто записываемые действия. +Во время записи макросы запоминают **все** действия и команды до тех пор пока +запись не будет остановлена.При вызове макрос применяет ту же самую последовательность +действий и команд на выделенном тексте. + +``` + qa # Начать запись макроса под именем 'a' + q # Закончить запись + @a # Выполнить макрос +``` + +### Настройка ~/.vimrc + +Файл .vimrc может использоваться для настройки Vim при запуске. + +Вот пример файла ~/.vimrc: + +``` +" Пример ~/.vimrc +" 2015.10 + +" Отключает совместимость со старым vi +set nocompatible + +" Определяет тип файла по его имени для разрешения автоматических отступов и т. д. +filetype indent plugin on + +" Включает подсветку синтаксиса +syntax on + +" Улучшенное автодополнение команд +set wildmenu + +" Использовать поиск не чувствительный к регистру +" за исключением использования заглавный букв +set ignorecase +set smartcase + +" Копирует отступы с текущей строки при добавлении новой +set autoindent + +" Показывать номера строк +set number + +" Настройки отступов, изменяйте по собственному вкусу + +" Количество видимых пробелов на один символ табуляции +set tabstop=4 + +" Количество пробелов в символе табуляции при редактировании +set softtabstop=4 + +" Количество пробелов в отступе при использовании операций >> и << +set shiftwidth=4 + +" Конвертировать символы табуляции в пробелы +set expandtab + +" Включить умную табуляцию и пробелы для отступов и выравнивания +set smarttab +``` + +### Ссылки + +[Vim | Home (EN)](http://www.vim.org/index.php) + +`$ vimtutor` + +[A vim Tutorial and Primer (EN)](https://danielmiessler.com/study/vim/) + +[What are the dark corners of Vim your mom never told you about? (Stack Overflow thread) (EN)](http://stackoverflow.com/questions/726894/what-are-the-dark-corners-of-vim-your-mom-never-told-you-about) + +[Arch Linux Wiki](https://wiki.archlinux.org/index.php/Vim_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)) -- cgit v1.2.3 From a0978c90d62156ed4bb062a4e84a6f9df16527de Mon Sep 17 00:00:00 2001 From: Nasgul Date: Wed, 26 Oct 2016 23:05:14 +0300 Subject: Edit ru translations (#2519) * Delete unnecessary line on english. Delete unnecessary line on english. * Update examples add new io and func requestServer * Update go-ru.html.markdown * Add Late Static Binding Add Late Static Binding --- ru-ru/go-ru.html.markdown | 9 +++++++++ ru-ru/php-ru.html.markdown | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) (limited to 'ru-ru') diff --git a/ru-ru/go-ru.html.markdown b/ru-ru/go-ru.html.markdown index e06ae9bd..6c8622cc 100644 --- a/ru-ru/go-ru.html.markdown +++ b/ru-ru/go-ru.html.markdown @@ -35,6 +35,7 @@ package main // Import предназначен для указания зависимостей этого файла. import ( "fmt" // Пакет в стандартной библиотеке Go + "io/ioutil" // Реализация функций ввод/ввывода. "net/http" // Да, это веб-сервер! "strconv" // Конвертирование типов в строки и обратно m "math" // Импортировать math под локальным именем m. @@ -321,6 +322,14 @@ func (p pair) ServeHTTP(w http.ResponseWriter, r *http.Request) { // Обработка запроса и отправка данных методом из http.ResponseWriter w.Write([]byte("You learned Go in Y minutes!")) } + +func requestServer() { + resp, err := http.Get("http://localhost:8080") + fmt.Println(err) + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + fmt.Printf("\nWebserver said: `%s`", string(body)) +} ``` ## Что дальше diff --git a/ru-ru/php-ru.html.markdown b/ru-ru/php-ru.html.markdown index b5feb105..76b3777c 100644 --- a/ru-ru/php-ru.html.markdown +++ b/ru-ru/php-ru.html.markdown @@ -684,6 +684,45 @@ use My\Namespace as SomeOtherNamespace; $cls = new SomeOtherNamespace\MyClass(); +*//********************** +* Позднее статическое связывание. +* +*/ + +class ParentClass +{ + public static function who() + { + echo "I'm a " . __CLASS__ . "\n"; + } + + public static function test() + { + // self ссылается на класс в котором определен метод. + self::who(); + // static ссылается на класс в котором метод вызван. + static::who(); + } +} + +ParentClass::test(); +/* +I'm a ParentClass +I'm a ParentClass +*/ + +class ChildClass extends ParentClass +{ + public static function who() + { + echo "But I'm " . __CLASS__ . "\n"; + } +} + +ChildClass::test(); +/* +I'm a ParentClass +But I'm ChildClass */ ``` -- cgit v1.2.3 From bfc9853cf26e4257ddaa3d05418e82ec52410716 Mon Sep 17 00:00:00 2001 From: Anton Slukovskiy Date: Thu, 27 Oct 2016 16:25:46 +0300 Subject: Change some text markup, fix broken link and quotes --- ru-ru/vim-ru.html.markdown | 48 +++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 22 deletions(-) (limited to 'ru-ru') diff --git a/ru-ru/vim-ru.html.markdown b/ru-ru/vim-ru.html.markdown index 5b7b96e6..6f62fd49 100644 --- a/ru-ru/vim-ru.html.markdown +++ b/ru-ru/vim-ru.html.markdown @@ -48,13 +48,14 @@ lang: ru-ru n # Передвигает курсор к следующему вхождения искомого слова N # Передвигает курсор к предыдущему вхождения искомого слова - :%s/foo/bar/g # Меняет 'foo' на 'bar' во всем файле - :s/foo/bar/g # Меняет 'foo' на 'bar' на текущей строке + :%s/foo/bar/g # Меняет «foo» на «bar» во всем файле + :s/foo/bar/g # Меняет «foo» на «bar» на текущей строке # Переходы к символу f # Перенести курсор к - t # Перенести курсор вперед и остановиться прямо перед + t # Перенести курсор вперед и остановиться прямо + # перед # Например, f< # Перести курсор и остановиться на < @@ -70,7 +71,8 @@ lang: ru-ru gg # Перейти к началу файла G # Перейти к концу файла - :NUM # Перейти к строке под номером NUM (NUM может быть любым числом) + :NUM # Перейти к строке под номером NUM + # (NUM может быть любым числом) H # Переместить курсор к верхнему краю экрана M # Переместить курсор к середине экрана L # Переместить курсор к нижнему краю экрана @@ -81,17 +83,18 @@ lang: ru-ru Vim основывается на концепте **режимов**. Командный режим - vim запускается в этом режиме по-умолчанию, используется для -навигации и ввода комманд -Режим ввода - используется для внесения изменений в файле -Визуальный режим - используется для подсветки текста и выполнения операций над ним -Режим командной строки - используется для ввода команд в нижнем углу экрана после символа ':' +навигации и ввода команд. +Режим ввода - используется для внесения изменений в файле. +Визуальный режим - используется для подсветки текста и выполнения операций над ним. +Режим командной строки - используется для ввода команд в нижнем углу экрана после символа «:». ``` i # Переводит vim в режим вставки перед позицией курсора a # Переводит vim в режим вставки после позиции курсора v # Переводит vim в визуальный режим : # Переводит vim в режим командной строки - # Выходит из любого режима в котором вы находитесь в командный режим + # Выходит из любого режима в котором вы находитесь + # в командный режим # Копирование и вставка текста @@ -104,25 +107,25 @@ Vim основывается на концепте **режимов**. x # Удалить символ под текущей позицией курсора ``` -## 'Грамматика' vim +## «Грамматика» vim -Vim можно рассматривать как набор команд в формате 'Глагол-Модификатор-Существительное', где: +Vim можно рассматривать как набор команд в формате «Глагол-Модификатор-Существительное», где: -Глагол - ваше действие -Модификатор - то как вы его выполняете -Существительное - объект над которым вы его выполняете +Глагол - ваше действие. +Модификатор - то как вы его выполняете. +Существительное - объект над которым вы его выполняете. -Несколько важных пример 'Глаголов', 'Модификаторов', и 'Существительных': +Несколько важных пример «Глаголов», «Модификаторов», и «Существительных»: ``` - # 'Глаголы' + # «Глаголы» d # Удалить c # Изменить y # Скопировать v # Визуально выделить - # 'Модификаторы' + # «Модификаторы» i # Внутри a # Снаружи @@ -132,14 +135,14 @@ Vim можно рассматривать как набор команд в фо / # Ищет строку после курсора ? # Ищет строку перед курсором - # 'Существительные' + # «Существительные» w # Слово s # Предложение p # Параграф b # Блок - # Образцы 'предложений' или команд + # Образцы «предложений» или команд d2w # Удалить 2 слова cis # Изменить объемлющее предложение @@ -154,7 +157,8 @@ Vim можно рассматривать как набор команд в фо ``` > # Сдвинуть выделенное на один отступ вправо < # Сдвинуть выделенное на один отступ влево - :earlier 15m # Возвращает документ к состоянию в котором он был 15 минут назад + :earlier 15m # Возвращает документ к состоянию в котором он был + # 15 минут назад :later 15m # Отменяет предыдущую команду ddp # Меняет позиции последовательных строк, сначала dd затем p . # Повторяет предыдущее действие @@ -168,7 +172,7 @@ Vim можно рассматривать как набор команд в фо действий и команд на выделенном тексте. ``` - qa # Начать запись макроса под именем 'a' + qa # Начать запись макроса под именем «a» q # Закончить запись @a # Выполнить макрос ``` @@ -234,4 +238,4 @@ set smarttab [What are the dark corners of Vim your mom never told you about? (Stack Overflow thread) (EN)](http://stackoverflow.com/questions/726894/what-are-the-dark-corners-of-vim-your-mom-never-told-you-about) -[Arch Linux Wiki](https://wiki.archlinux.org/index.php/Vim_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)) +[Arch Linux Wiki](https://wiki.archlinux.org/index.php/Vim_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29) -- cgit v1.2.3 From a191e77c94eb47aeb9589e251b25b4e392acb940 Mon Sep 17 00:00:00 2001 From: LanaTim Date: Fri, 28 Oct 2016 13:01:57 +0300 Subject: DTD Compatibility and XML Schema Definitions (#2529) DTD Compatibility and XML Schema Definitions --- ru-ru/xml-ru.html.markdown | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'ru-ru') diff --git a/ru-ru/xml-ru.html.markdown b/ru-ru/xml-ru.html.markdown index b0096b75..bf3f22b0 100644 --- a/ru-ru/xml-ru.html.markdown +++ b/ru-ru/xml-ru.html.markdown @@ -128,3 +128,18 @@ XML-документ, который следует описанию докум ``` + +## DTD совместимость и определение XML Schema(схем/структуры) + +Поддержка DTDs является повсеместным, потому что это довольно старая технология. К сожалению, современные функции XML как пространств имен(namespaces) не поддерживаются DTDs. Определения XML-схемы (XSDs) предназначены для замены DTDs которая в свою очередь предназначена для определения грамматики XML-документа. + +## Ресурсы + +* [Валидатор XML (ссылка на английском языке)](http://www.xmlvalidation.com) + +## Для будущего прочтения + +* [XML Schema Definitions Tutorial (ссылка на английском языке)](http://www.w3schools.com/schema/) +* [DTD руководство (ссылка на английском языке)](http://www.w3schools.com/xml/xml_dtd_intro.asp) +* [XML руководство (ссылка на английском языке)](http://www.w3schools.com/xml/default.asp) +* [использование XPath запросов для парсинга XML (ссылка на английском языке)](http://www.w3schools.com/xml/xml_xpath.asp) -- cgit v1.2.3 From 43ce42005ec386097019bc44d66c6a989a429848 Mon Sep 17 00:00:00 2001 From: Nasgul Date: Mon, 31 Oct 2016 12:56:41 +0200 Subject: [php/ru] Add magic constants (#2520) * Delete unnecessary line on english. Delete unnecessary line on english. * Update examples add new io and func requestServer * Update go-ru.html.markdown * Add Late Static Binding Add Late Static Binding * Add magic constants Add magic constants * Update php-ru.html.markdown * Update php-ru.html.markdown * Error Handling Error Handling * [php/ru] edit my changes with 80 symbols in line rule. * [php/ru] add removed part from array. --- ru-ru/php-ru.html.markdown | 118 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 117 insertions(+), 1 deletion(-) (limited to 'ru-ru') diff --git a/ru-ru/php-ru.html.markdown b/ru-ru/php-ru.html.markdown index 76b3777c..181368de 100644 --- a/ru-ru/php-ru.html.markdown +++ b/ru-ru/php-ru.html.markdown @@ -58,8 +58,10 @@ $int1 = 12; // => 12 $int2 = -12; // => -12 $int3 = 012; // => 10 (ведущий 0 обозначает восьмеричное число) $int4 = 0x0F; // => 15 (ведущие символы 0x означают шестнадцатеричное число) + // Двоичная запись integer доступна начиная с PHP 5.4.0. $int5 = 0b11111111; // 255 (0b в начале означает двоичное число) + // Дробные числа $float = 1.234; $float = 1.2e3; @@ -87,6 +89,7 @@ $dbl_quotes = "This is a $sgl_quotes."; // => 'This is a $String.' // Специальные (escape) символы работают только в двойных кавычках $escaped = "This contains a \t tab character."; $unescaped = 'This just contains a slash and a t: \t'; + // Заключайте переменные в фигурные скобки, если это необходимо $apples = "I have {$number} apples to eat."; $oranges = "I have ${number} oranges to eat."; @@ -723,8 +726,121 @@ ChildClass::test(); /* I'm a ParentClass But I'm ChildClass + +/********************** +* Позднее статическое связывание. +* +*/ + +class ParentClass +{ + public static function who() + { + echo "I'm a " . __CLASS__ . "\n"; + } + + public static function test() + { + // self ссылается на класс в котором определен метод. + self::who(); + // static ссылается на класс в котором метод вызван. + static::who(); + } +} + +ParentClass::test(); +/* +I'm a ParentClass +I'm a ParentClass +*/ + +class ChildClass extends ParentClass +{ + public static function who() + { + echo "But I'm " . __CLASS__ . "\n"; + } +} + +ChildClass::test(); +/* +I'm a ParentClass +But I'm ChildClass +*/ + + +/********************** +* Магические константы +* +*/ + +// Возвращает имя текущего класса. Должно быть использовано внутри класса. +echo "Current class name is " . __CLASS__; + +// Возвращает полный путь текущей папки из которой вызван файл. +echo "Current directory is " . __DIR__; + + // Обычно используют в таких случаях: + require __DIR__ . '/vendor/autoload.php'; + +// Возвращает полный путь к текущему файлу. +echo "Current file path is " . __FILE__; + +// Возвращает имя текущей функции. +echo "Current function name is " . __FUNCTION__; + +// Возвращает номер текущей линии. +echo "Current line number is " . __LINE__; + +// Возвращает имя текущего метода. Возвращает только если вызван внутри метода. +echo "Current method is " . __METHOD__; + +// Возвращает имя текущего пространства имен. +echo "Current namespace is " . __NAMESPACE__; + +// Возвращает имя текущего трейта. +// Возвращает только если испольщуется внутри трейта. +echo "Current namespace is " . __TRAIT__; + + +/********************** +* Обработка ошибок +* */ +// Простую обработку ошибок можно произвести спомощью try catch блока. + +try { + // Выполняем что-то +} catch (Exception $e) { + // Обработка исключения +} + +// При использовании try catch блока в области вилимости, стоит использовать +// следующий подход: + +try { + // Do something +} catch (\Exception $e) { + // Обработка исключения +} + +// Специальное(кастомное) исключение - exceptions + +class MyException extends Exception {} + +try { + + $condition = true; + + if ($condition) { + throw new MyException('Something just happend'); + } + +} catch (MyException $e) { + // Обработка исключения +} + ``` ## Смотрите также: @@ -734,4 +850,4 @@ But I'm ChildClass Если вы раньше пользовались языком с хорошей организацией пакетов, посмотрите [Composer](http://getcomposer.org/). -Для изучения стандартов использования языка посетите PHP Framework Interoperability Group's [PSR standards](https://github.com/php-fig/fig-standards). +Для изучения стандартов использования языка посетите PHP Framework Interoperability Group's [PSR standards](https://github.com/php-fig/fig-standards). -- cgit v1.2.3 From 70db79b2bacdc430d23df59abf452b4b1e04060d Mon Sep 17 00:00:00 2001 From: LanaTim Date: Mon, 31 Oct 2016 19:08:50 +0200 Subject: [html/ru] (#2535) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * DTD Compatibility and XML Schema Definitions DTD Compatibility and XML Schema Definitions * [html/ru] @ToDo translate html example * Update html-ru.html.markdown * Update html-ru.html.markdown * [html/ru] update page [html/ru] update page * хъ * [html/ru] [html/ru] edited part of html ru page. * [html/ru] update translations [html/ru] update translations * [html/ru] finish translate html * [html/ru] edit links edit links --- ru-ru/html-ru.html.markdown | 128 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 ru-ru/html-ru.html.markdown (limited to 'ru-ru') diff --git a/ru-ru/html-ru.html.markdown b/ru-ru/html-ru.html.markdown new file mode 100644 index 00000000..5cf95fc4 --- /dev/null +++ b/ru-ru/html-ru.html.markdown @@ -0,0 +1,128 @@ +--- +language: html +filename: learnhtml.html +contributors: + - ["Christophe THOMAS", "https://github.com/WinChris"] +translators: + - ["Lana Tim", "https://github.com/LanaTim"] +--- + +HTML расшифровывается как Hypertext Markup Language(гипертекстовый язык разметки). +Это язык используют для написания страниц для World Wide Web(всемирной паутины). +Это язык разметки позволяет писать веб-страниц с помощью кода, чтобы определять, +как должны быть отображены текст и данные. +На самом деле, HTML файлы представляют собой простые текстовые файлы. +Что такое разметка? Это способ организации данных страницы, +путем открытия и закрытия тегов(помещая данные внутрь этих тегов). +Эта разметка служит, чтобы придать значение тексту, который он окружает. +Как и в других языках программирования, HTML имеет много версий. Здесь мы будем говорить о HTML5. + + +**Примечание:** Вы можете тестировать различные теги и элементы по мере продвижения +через учебник на сайте, как [codepen](http://codepen.io/pen/) для того, чтобы увидеть +их влияние, понять, как они работают и ознакомиться с языком. +В данной статье рассматривается в основном HTML синтаксис и некоторые полезные советы. + +```html + + + + + + + + + + Мой сайт + + +

Привет, мир!

+ + Переходите сюда, чтоб посмотреть как это выглядит. + +

Это параграф.

+

Это другой параграф.

+
    +
  • Это элемент не нумерованного списка (маркированный список)
  • +
  • Это другой элемент
  • +
  • Это последний элемент в списке
  • +
+ + + + + + + + + + + + + + + + + + + + + Мой сайт + + + + + + + +

Hello, world!

+ + Переходите сюда, чтоб посмотреть как это выглядит. + +

Это параграф.

+

Это другой параграф.

+
    + +
  • Это элемент в не нумерованном списке (маркированный список)
  • +
  • Это еще один элемент
  • +
  • И это последний пункт в списке
  • +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Первый заголовок Второй заголовок
Первый ряд, первая колонка Первый ряд, вторая колонка
Второй ряв, первая колонкаВторой ряд, вторая колонка
+ +``` + +## Применение + +HTML файлы имеют окончание(расширение) `.html`. + +## Узнать больше + +* [википедиа](https://ru.wikipedia.org/wiki/HTML) +* [HTML учебник](https://developer.mozilla.org/ru/docs/Web/HTML) +* [htmlbook](http://htmlbook.ru/) -- cgit v1.2.3 From ce00d724a1c648b5a735fcc79276c4157d0f883d Mon Sep 17 00:00:00 2001 From: Samantha McVey Date: Wed, 16 Nov 2016 15:21:24 -0800 Subject: Fix #2573 where ru-ru HTML file did not specify which language it was in the YAML frontmatter --- ru-ru/html-ru.html.markdown | 1 + 1 file changed, 1 insertion(+) (limited to 'ru-ru') diff --git a/ru-ru/html-ru.html.markdown b/ru-ru/html-ru.html.markdown index 5cf95fc4..5069d77f 100644 --- a/ru-ru/html-ru.html.markdown +++ b/ru-ru/html-ru.html.markdown @@ -5,6 +5,7 @@ contributors: - ["Christophe THOMAS", "https://github.com/WinChris"] translators: - ["Lana Tim", "https://github.com/LanaTim"] +lang: ru-ru --- HTML расшифровывается как Hypertext Markup Language(гипертекстовый язык разметки). -- cgit v1.2.3 From ae16d450781aecd9ff4423deb2cf67317d309080 Mon Sep 17 00:00:00 2001 From: omgee Date: Tue, 3 Jan 2017 09:41:35 +0200 Subject: [c++/en,es,it,br,ru,ch] Fix forgotten namespace std:: (#2619) --- ru-ru/c++-ru.html.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'ru-ru') diff --git a/ru-ru/c++-ru.html.markdown b/ru-ru/c++-ru.html.markdown index 0cf580d5..cef5ab7e 100644 --- a/ru-ru/c++-ru.html.markdown +++ b/ru-ru/c++-ru.html.markdown @@ -304,7 +304,7 @@ someFun(tempObjectFun()); // Выполняет версию с временн basic_string(const basic_string& other); basic_string(basic_string&& other); -// Идея в том, что если мы конструируем новую строку из временного объекта (который +// Идея в том, что если мы конструируем новую строку из временного объекта (который // так или иначе будет уничтожен), мы можем использовать более эффективный конструктор, // который "спасает" части этой временной строки. Эта концепция была названа // "move semantics". @@ -329,7 +329,7 @@ ECarTypes GetPreferredCarType() } // На момент выхода C++11 есть простой способ назначения типа перечисления, что -// полезно в случае сериализации данных и преобразований между конечным типом и +// полезно в случае сериализации данных и преобразований между конечным типом и // соответствующими константами. enum ECarTypes : uint8_t { @@ -453,7 +453,7 @@ void Dog::print() const Dog::~Dog() { - cout << "Goodbye " << name << "\n"; + std::cout << "Goodbye " << name << "\n"; } int main() { @@ -521,7 +521,7 @@ public: // по умолчанию (0, 0) Point() { }; - // Следующий синтаксис известен как список инициализации и является верным способом + // Следующий синтаксис известен как список инициализации и является верным способом // инициализировать значения членов класса. Point (double a, double b) : x(a), @@ -793,7 +793,7 @@ void doSomethingWithAFile(const std::string& filename) // Весь идиоматический код на С++ широко использует RAII для всех ресурсов. // Дополнительные примеры включат: // - Использование памяти unique_ptr и shared_ptr -// - Контейнеры - стандартная библиотека связанных списков, векторы +// - Контейнеры - стандартная библиотека связанных списков, векторы // (т.е. самоизменяемые массивы), хэш-таблицы и все остальное автоматически // уничтожается сразу же, когда выходит за пределы области видимости. // - Ипользование мьютексов lock_guard и unique_lock -- cgit v1.2.3 From 7666ca9399298ff3237c155ae5070507b3a794d1 Mon Sep 17 00:00:00 2001 From: Sergei Date: Sat, 25 Feb 2017 23:30:06 +0700 Subject: Update clojure-ru.html.markdown, typo fixed (#2674) --- ru-ru/clojure-ru.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ru-ru') diff --git a/ru-ru/clojure-ru.html.markdown b/ru-ru/clojure-ru.html.markdown index 451da312..356d1cc0 100644 --- a/ru-ru/clojure-ru.html.markdown +++ b/ru-ru/clojure-ru.html.markdown @@ -321,7 +321,7 @@ keymap ; => {:a 1, :b 2, :c 3} - оригинал не был затронут ; Также модуль может быть импортирован формой require (require 'clojure.string) -; После этого модуль становится доступе в текущем пространстве имен, +; После этого модуль становится доступен в текущем пространстве имен, ; а вызов его функций может быть осуществлен указанием полного имени функции: (clojure.string/blank? "") ; => true -- cgit v1.2.3 From eb2bd9e81266dcfa23867907dc00f05711807b7e Mon Sep 17 00:00:00 2001 From: pru-mike Date: Wed, 15 Mar 2017 12:07:05 +0300 Subject: [asymptotic-notation/ru] Added russian translation (#2679) --- ru-ru/asymptotic-notation-ru.html.markdown | 225 +++++++++++++++++++++++++++++ 1 file changed, 225 insertions(+) create mode 100644 ru-ru/asymptotic-notation-ru.html.markdown (limited to 'ru-ru') diff --git a/ru-ru/asymptotic-notation-ru.html.markdown b/ru-ru/asymptotic-notation-ru.html.markdown new file mode 100644 index 00000000..73ad80ba --- /dev/null +++ b/ru-ru/asymptotic-notation-ru.html.markdown @@ -0,0 +1,225 @@ +--- +category: Algorithms & Data Structures +name: Asymptotic Notation +contributors: + - ["Jake Prather", "http://github.com/JakeHP"] + - ["Divay Prakash", "http://github.com/divayprakash"] +translators: + - ["pru-mike", "http://gihub.com/pru-mike"] +lang: ru-ru +--- + +# О-cимволика + +## Что это такое? + +О-cимволика или асимптотическая запись это система символов позволяющая оценить +время выполнения алгоритма, устанавливая зависимость времени выполнения от +увеличения объема входных данных, так же известна как оценка +сложности алгоритмов. Быстро-ли алгоритм станет невероятно медленным, когда +объем входных данных увеличится? Будет-ли алгоритм выполняться достаточно быстро, +если объем входных данных возрастет? О-символика позволяет ответить на эти +вопросы. + +## Можно-ли по-другому найти ответы на эти вопросы? + +Один способ это подсчитать число элементарных операций в зависимости от +различных объемов входных данных. Хотя это и приемлемое решение, тот объем +работы которого оно потребует, даже для простых алгоритмов, делает его +использование неоправданным. + +Другой способ это измерить какое время алгоритм потребует для завершения на +различных объемах входных данных. В тоже время, точность и относительность +(полученное время будет относиться только к той машине на которой оно +вычислено) этого метода зависит от среды выполнения: компьютерного аппаратного +обеспечения, мощности процессора и т.д. + +## Виды О-символики + +В первом разделе этого документа мы определили, что О-символика +позволяет оценивать алгоритмы в зависимости от изменения размера входных +данных. Представим что алгоритм это функция f, n размер входных данных и +f(n) время выполнения. Тогда для данного алгоритма f c размером входных +данных n получим какое-то результирующее время выполнения f(n). +Из этого можно построить график, где ось Y время выполнения, ось X размер входных +данных и точки на графике это время выполнения для заданного размера входных +данных. + +С помощью О-символики можно оценить функцию или алгоритм +несколькими различными способами. Например можно оценить алгоритм исходя +из нижней оценки, верхней оценки, тождественной оценки. Чаще всего встречается +анализ на основе верхней оценки. Как правило не используется нижняя оценка, +потому что она не подходит под планируемые условия. Отличный пример алгоритмы +сортировки, особенно добавление элементов в древовидную структуру. Нижняя оценка +большинства таких алгоритмов может быть дана как одна операция. В то время как в +большинстве случаев, добавляемые элементы должны быть отсортированы +соответствующим образом при помощи дерева, что может потребовать обхода целой +ветви. Это и есть худший случай, для которого планируется верхняя оценка. + +### Виды функций, пределы и упрощения + +``` +Логарифмическая функция - log n +Линейная функция - an + b +Квадратическая функция - an^2 + bn +c +Полиномиальная функция - an^z + . . . + an^2 + a*n^1 + a*n^0, где z константа +Экспоненциальная функция - a^n, где a константа +``` + +Приведены несколько базовых функций используемых при определении сложности в +различных оценках. Список начинается с самой медленно возрастающей функции +(логарифм, наиболее быстрое время выполнения) и следует до самой быстро +возрастающей функции (экспонента, самое медленное время выполнения). Отметим, +что в то время как 'n' или размер входных данных, возрастает в каждой из этих функций, +результат намного быстрее возрастает в квадратической, полиномиальной +и экспоненциальной по сравнению с логарифмической и линейной. + +Крайне важно понимать, что при использовании описанной далее нотации необходимо +использовать упрощенные выражения. +Это означает, что необходимо отбрасывать константы и слагаемые младших порядков, +потому что если размер входных данных (n в функции f(n) нашего примера) +увеличивается до бесконечности (в пределе), тогда слагаемые младших порядков +и константы становятся пренебрежительно малыми. Таким образом, если есть +константа например размера 2^9001 или любого другого невообразимого размера, +надо понимать, что её упрощение внесёт значительные искажения в точность +оценки. + +Т.к. нам нужны упрощенные выражения, немного скорректируем нашу таблицу... + +``` +Логарифм - log n +Линейная функция - n +Квадратическая функция - n^2 +Полиномиальная функция - n^z, где z константа +Экспонента - a^n, где a константа +``` + +### О-Большое +О-Большое, записывается как **О**, это асимптотическая запись для оценки худшего +случая или для ограничения заданой функции сверху. Это позволяет сделать +_**асимптотическую оценку верхней границы**_ скорости роста времени выполнения +алгоритма. Допустим `f(n)` время выполнения алгоритма и `g(n)` заданная временная +сложность которая проверяется для алгоритма. Тогда `f(n)` это O(g(n)), если +существуют действительные константы с (с > 0) и n0, такие +что `f(n)` <= `c g(n)` выполняется для всех n начиная с некоторого n0 (n > n0). + +*Пример 1* + +``` +f(n) = 3log n + 100 +g(n) = log n +``` + +Является-ли `f(n)` O(g(n))? +Является-ли `3 log n + 100` O(log n)? +Посмотрим на определение О-Большого: + +``` +3log n + 100 <= c * log n +``` + +Существуют-ли константы c, n0 такие что выражение верно для всех n > n0 + +``` +3log n + 100 <= 150 * log n, n > 2 (неопределенно для n = 1) +``` + +Да! По определению О-Большого `f(n)` является O(g(n)). + +*Пример 2* + +``` +f(n) = 3 * n^2 +g(n) = n +``` + +Является-ли `f(n)` O(g(n))? +Является-ли `3 * n^2` O(n)? +Посмотрим на определение О-Большого: + +``` +3 * n^2 <= c * n +``` + +Существуют-ли константы c, n0 такие что выражение верно для всех n > n0? +Нет, не существуют. `f(n)` НЕ ЯВЛЯЕТСЯ O(g(n)). + +### Омега-Большое +Омега-Большое, записывается как **Ω**, это асимптотическая запись для оценки +лучшего случая или для ограничения заданой функции снизу. Это позволяет сделать +_**асимптотическую оценку нижней границы**_ скорости роста времени выполнения +алгоритма. + +`f(n)` принадлежит Ω(g(n)), если существуют действительные константы +с (с > 0) и 0 (n0 > 0), такие что `f(n)` >= `c g(n)` для всех n > n0. + +### Примечание + +Асимптотические оценки сделаные при помощи О-Большое и Омега-Большое могут +как быть так и не быть точными. Для того что бы обозначить что границы не +являются асимптотически точными используются записи о-малое и омега-малое. + +### О-Малое +O-Малое, записывается как **о**, это асимптотическая запись для оценки верхней +границы времени выполнения алгоритма, при условии что граница не является +асимптотически точной. + +`f(n)` является o(g(n)), если можно подобрать такие действительные константы, +что для всех c (c > 0) найдется n0 (n0 > 0), так +что `f(n)` < `c g(n)` выполняется для всех n (n > n0). + +Определения О-символики для О-Большое и О-Малое похожи. Главное отличие в том, +что если f(n) = O(g(n)), тогда условие f(n) <= c g(n) выполняется если _**существует**_ +константа c > 0, но если f(n) = o(g(n)), тогда условие f(n) < c g(n) выполняется +для _**всех**_ констант с > 0. + +### Омега-малое +Омега-малое, записывается как **ω**, это асимптотическая запись для оценки +верней границы времени выполнения алгоритма, при условии что граница не является +асимптотически точной. + +`f(n)` является ω(g(n)), если можно подобрать такие действительные константы, +что для всех c (c > 0) найдется n0 (n0 > 0), так +что `f(n)` > `c g(n)` выполняется для всех n (n > n0) + +Определения Ω-символики и ω-символики похожи. Главное отличие в том, что +если f(n) = Ω(g(n)), тогда условие f(n) >= c g(n) выполняется если _**существует**_ +константа c > 0, но если f(n) = ω(g(n)), тогда условие f(n) > c g(n) +выполняется для _**всех**_ констант с > 0. + +### Тета +Тета, записывается как **Θ**, это асимптотическая запись для оценки +_***асимптотически точной границы***_ времени выполнения алгоритма. + +`f(n)` является Θ(g(n)), если для некоторых действительных +констант c1, c2 и n0 (c1 > 0, c2 > 0, n0 > 0), +`c1 g(n)` < `f(n)` < `c2 g(n)` для всех n (n > n0). + +∴ `f(n)` является Θ(g(n)) означает что `f(n)` является O(g(n)) +и `f(n)` является Ω(g(n)). + +О-Большое основной инструмент для анализа сложности алгоритмов. +Так же смотрите примеры по ссылкам. + +### Заключение +Такую тему сложно изложить кратко, поэтому обязательно стоит пройти по ссылкам и +посмотреть дополнительную литературу. В них дается более глубокое описание с +определениями и примерами. + + +## Дополнительная литература + +* [Алгоритмы на Java](https://www.ozon.ru/context/detail/id/18319699/) +* [Алгоритмы. Построение и анализ](https://www.ozon.ru/context/detail/id/33769775/) + +## Ссылки + +* [Оценки времени исполнения. Cимвол O()](http://algolist.manual.ru/misc/o_n.php) +* [Асимптотический анализ и теория вероятностей](https://www.lektorium.tv/course/22903) + +## Ссылки (Eng) + +* [Algorithms, Part I](https://www.coursera.org/learn/algorithms-part1) +* [Cheatsheet 1](http://web.mit.edu/broder/Public/asymptotics-cheatsheet.pdf) +* [Cheatsheet 2](http://bigocheatsheet.com/) + -- cgit v1.2.3 From 7a7605933d251d22faec0fe6d81af5031374a758 Mon Sep 17 00:00:00 2001 From: Dmitrii Kuznetsov Date: Wed, 15 Mar 2017 19:08:28 +1000 Subject: [forth/ru] Added russian translation (#2675) --- ru-ru/forth-ru.html.markdown | 240 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 ru-ru/forth-ru.html.markdown (limited to 'ru-ru') diff --git a/ru-ru/forth-ru.html.markdown b/ru-ru/forth-ru.html.markdown new file mode 100644 index 00000000..05316578 --- /dev/null +++ b/ru-ru/forth-ru.html.markdown @@ -0,0 +1,240 @@ +--- +language: forth +contributors: + - ["Horse M.D.", "http://github.com/HorseMD/"] +translators: + - ["Dmitrii Kuznetsov", "https://github.com/torgeek"] +filename: learnforth-ru.fs +lang: ru-ru +--- + +Форт создан Чарлзом Муром в 70-е годы. Это императивный, стековый язык программирования и среда исполнения программ. Использовался в таких проектах как Open Firmware. Продолжает применятся в проектах. Применяется в НАСА. + +Внимание: эта материал использует реализацию Форта - Gforth, но большая часть написанного будет работать в других средах. + +``` +\ Это комментарий +( Это тоже комментарий, но использыется для предоределённых слов ) + +\ --------------------------------- Прекурсор -------------------------------- + +\ Всё программирование на Форте заключается в манипулировании +\ параметрами на стеке. +5 2 3 56 76 23 65 \ ok + +\ Эти числа добавляются в стек слева направо +.s \ <7> 5 2 3 56 76 23 65 ok + +\ В Форте всё - это слова-команды или числа. Слова разделяются любым числом +\ пробелов и переходов на новую строку. Длина слова не больше 31 литеры. + +\ ---------------------------- Базовая арифметика ---------------------------- + +\ Арифметика (фактически все ключевые слова требуют данных) - это манипуляция +\ данными на стеке. +5 4 + \ ok + +\ `.` показывает верхнее значение в стеке: +. \ 9 ok + +\ Ещё примеры арифметических выражений: +6 7 * . \ 42 ok +1360 23 - . \ 1337 ok +12 12 / . \ 1 ok +13 2 mod . \ 1 ok + +99 negate . \ -99 ok +-99 abs . \ 99 ok +52 23 max . \ 52 ok +52 23 min . \ 23 ok + +\ --------------------------- Манипуляции со стеком --------------------------- + +\ Естественно, когда мы работаем со стеком, то используем +\ больше полезных методов: + +3 dup - \ дублировать верхний элемент в стеке + \ (1-й становится эквивалентным 2-му): 3 - 3 +2 5 swap / \ поменять местами верхний элемент со 2-м элементом: 5 / 2 +6 4 5 rot .s \ сменять по очереди 3-и верхних элемента: 4 5 6 +4 0 drop 2 / \ снять верхний элемент (не печатается на экране): 4 / 2 +1 2 3 nip .s \ снять второй элемент (подобно исключению элемента): 1 3 + +\ ------------------ Более продвинутые манипуляции со стеком ------------------ + +1 2 3 4 tuck \ дублировать верхний елемент стека во вторую позицию: + \ 1 2 4 3 4 ok +1 2 3 4 over \ диблировать второй елемент наверх стека: + \ 1 2 3 4 3 ok +1 2 3 4 2 roll \ *переместить* элемент в заданной позиции наверх стека: + \ 1 3 4 2 ok +1 2 3 4 2 pick \ *дублировать* элемент в заданной позиции наверх: + \ 1 2 3 4 2 ok + +\ Внимание! Обращения к стеку индексируются с нуля. + +\ --------------------------- Создание новых слов ----------------------------- + +\ Определение новых слов через уже известные. Двоеточие `:` переводит Форт +\ в режим компиляции выражения, которое заканчивается точкой с запятой `;`. +: square ( n -- n ) dup * ; \ ok +5 square . \ 25 ok + +\ Мы всегда можем посмотреть, что содержится в слове: +see square \ : square dup * ; ok + +\ -------------------------------- Зависимости -------------------------------- + +\ -1 == true, 0 == false. Однако, некоторые ненулевые значения +\ обрабатываются как true: +42 42 = \ -1 ok +12 53 = \ 0 ok + +\ `if` это компилируемое слово. `if` `then` . +: ?>64 ( n -- n ) dup 64 > if ." Больше чем 64!" then ; +\ ok +100 ?>64 +\ Больше чем 64! ok + +\ Else: +: ?>64 ( n -- n ) dup 64 > if ." Больше чем 64!" else ." меньше чем 64!" then ; +100 ?>64 \ Больше чем 64! ok +20 ?>64 \ меньше чем 64! ok + +\ ------------------------------------ Циклы ----------------------------------- + +\ `do` это тоже компилируемое слово. +: myloop ( -- ) 5 0 do cr ." Hello!" loop ; \ ok +myloop +\ Hello! +\ Hello! +\ Hello! +\ Hello! +\ Hello! ok + +\ `do` предполагает наличие двух чисел на стеке: конечное и начальное число. + +\ Мы можем назначить в цикле переменную `i` для значения индекса: +: one-to-12 ( -- ) 12 0 do i . loop ; \ ok +one-to-12 \ 0 1 2 3 4 5 6 7 8 9 10 11 12 ok + +\ `?do` работает подобным образом, за исключением пропуска начального +\ и конечного значения индекса цикла. +: squares ( n -- ) 0 ?do i square . loop ; \ ok +10 squares \ 0 1 4 9 16 25 36 49 64 81 ok + +\ Изменение "шага" цикла проиводится командой `+loop`: +: threes ( n n -- ) ?do i . 3 +loop ; \ ok +15 0 threes \ 0 3 6 9 12 ok + +\ Запуск бесконечного цикла - `begin` `until`: +: death ( -- ) begin ." Вы всё ещё здесь?" 0 until ; \ ok + +\ ---------------------------- Переменные и память ---------------------------- + +\ Используйте `variable`, что бы объявить `age` в качестве переменной. +variable age \ ok + +\ Затем мы запишем число 21 в переменную 'age' (возраст) словом `!`. +21 age ! \ ok + +\ В заключении мы можем напечатать значение переменной прочитав его словом `@`, +\ которое добавит значение на стек или использовать слово `?`, +\ что бы прочитать и распечатать в одно действие. +age @ . \ 21 ok +age ? \ 21 ok + +\ Константы объявляются аналогично, за исключем того, что мы не должны +\ беспокоиться о выделении адреса в памяти: +100 constant WATER-BOILING-POINT \ ok +WATER-BOILING-POINT . \ 100 ok + +\ ---------------------------------- Массивы ---------------------------------- + +\ Создание массива похоже на объявление переменной, но нам нужно выделить +\ больше памяти. + +\ Вы можете использовать слова `2 cells allot` для создания массива +\ размером 3 элемента: +variable mynumbers 2 cells allot \ ok + +\ Инициализировать все значения в 0 +mynumbers 3 cells erase \ ok + +\ В качестве альтернативы мы можем использовать `fill`: +mynumbers 3 cells 0 fill + +\ или мы можем пропустить все слова выше и инициализировать массив +\ нужными значениями: +create mynumbers 64 , 9001 , 1337 , \ ok (the last `,` is important!) + +\ ... что эквивалентно: + +\ Ручная запись значений по индексам ячеек: +64 mynumbers 0 cells + ! \ ok +9001 mynumbers 1 cells + ! \ ok +1337 mynumbers 2 cells + ! \ ok + +\ Чтение значений по индексу: +0 cells mynumbers + ? \ 64 ok +1 cells mynumbers + ? \ 9001 ok + +\ Мы можем просто сделать собственное слово для манипуляции массивом: +: of-arr ( n n -- n ) cells + ; \ ok +mynumbers 2 of-arr ? \ 1337 ok + +\ Которую тоже можно использовать для записи значений: +20 mynumbers 1 of-arr ! \ ok +mynumbers 1 of-arr ? \ 20 ok + +\ ------------------------------ Стек возвратов ------------------------------ + +\ Стек возвратов используется для удержания ссылки, +\ когда одно слово запускает другое, например, в цикле. + +\ Мы всегда видим это, когда используем `i`, которая возвращает дубль верхнего +\ значения стека. `i` это эквивалент `r@`. +: myloop ( -- ) 5 0 do r@ . loop ; \ ok + +\ Так же как при чтении мы можем добавить ссылку в стек возвратов и удалить её: +5 6 4 >r swap r> .s \ 6 5 4 ok + +\ Внимание: так как Форт использует стек возвратов для указателей на слово `>r` +\ следует всегда пользоваться `r>`. + +\ ---------------- Операции над числами с плавающей точкой -------------------- + +\ Многие фортовцы стараются избегать использование слов с вещественными числами. +8.3e 0.8e f+ f. \ 9.1 ok + +\ Обычно мы просто используем слово 'f', когда обращаемся к вещественным числам: +variable myfloatingvar \ ok +4.4e myfloatingvar f! \ ok +myfloatingvar f@ f. \ 4.4 ok + +\ ---------- В завершение несколько полезных замечаний и слов ----------------- + +\ Указание несуществующего слова очистит стек. Тем не менее, есть специальное +\ слово для этого: +clearstack + +\ Очистка экрана: +page + +\ Загрузка форт-файла: +\ s" forthfile.fs" included + +\ Вы можете вывести список всех слов словаря Форта (это большой список!): +words + +\ Выход из Gforth: +bye + +``` + +##Готовы к большему? + +* [Начала Форта (англ.)](http://www.forth.com/starting-forth/) +* [Простой Форт (англ.)](http://www.murphywong.net/hello/simple.htm) +* [Мышление Форта (англ.)](http://thinking-forth.sourceforge.net/) +* [Учебники Форта (рус.)](http://wiki.forth.org.ru/УчебникиФорта) -- cgit v1.2.3 From 63a6eb1182205389388e13b680962199ac9b3ffb Mon Sep 17 00:00:00 2001 From: Andy Date: Sat, 1 Apr 2017 22:19:58 +0200 Subject: [haskell] Updating second headline (#2695) * Haskell: Updating second headline * Haskell: Updating second headline (es) * Haskell: Updating second headline (fr) * Haskell: Updating second headline (pl) * Haskell: Updating second headline (pt) * Haskell: Updating second headline (ro) * Haskell: Updating second headline (ru) * Haskell: Updating second headline (cn) --- ru-ru/haskell-ru.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ru-ru') diff --git a/ru-ru/haskell-ru.html.markdown b/ru-ru/haskell-ru.html.markdown index e15fe6b7..fecee51b 100644 --- a/ru-ru/haskell-ru.html.markdown +++ b/ru-ru/haskell-ru.html.markdown @@ -66,7 +66,7 @@ not False -- True ---------------------------------------------------- --- Списки и Кортежи +-- 2. Списки и Кортежи ---------------------------------------------------- -- Все элементы списка в Haskell -- cgit v1.2.3 From 134b24a24c175f563bb437af8d1ba5974ad54dbc Mon Sep 17 00:00:00 2001 From: Vadim Toptunov Date: Wed, 5 Apr 2017 13:04:08 +0300 Subject: [pyqt-ru] New translation (#2697) * Create [pyqt-ru] New translation * Update [pyqt/ru] pyqt-ru.html.markdown Update [pyqt/ru] pyqt-ru.html.markdown with the correct filename * Rename [pyqt-ru]pyqt-ru.html.markdown to pyqt-ru.html.markdown * Update pyqt-ru.html.markdown --- ru-ru/pyqt-ru.html.markdown | 83 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 ru-ru/pyqt-ru.html.markdown (limited to 'ru-ru') diff --git a/ru-ru/pyqt-ru.html.markdown b/ru-ru/pyqt-ru.html.markdown new file mode 100644 index 00000000..7693551c --- /dev/null +++ b/ru-ru/pyqt-ru.html.markdown @@ -0,0 +1,83 @@ +--- +category: tool +tool: PyQT +filename: learnpyqt-ru.py +translator: + - ["Vadim Toptunov", "https://github.com/VadimToptunov"] +--- + +**Qt** - широко известный кросс-платформенный фреймворк для разработки программного обеспечения, +который может быть использован на различных софтварных и хардварных платформах без какого-либо +изменения в коде. Данный фреймворк при этом обладает мощью и скоростью нативных приложений. +Qt и был изначально написан на *C++*. + +Данный текст является адаптацией введения в Qt на C++ под авторством Алексея Ковальчука для pyqt. + + +```python + +def window(): + # Создайте объект приложения + app = QtGui.QApplication(sys.argv) + # Создайте виджет, где будет находиться наш лейбл + w = QtGui.QWidget() + # Добавьте лейбл в виджет + b = QtGui.QLabel(w) + # Задайте текст для лейбла + b.setText("Hello World!") + # Задайте информация о размере и расположении + w.setGeometry(100, 100, 200, 50) + b.move(50, 20) + # Задайте заголовок окна + w.setWindowTitle("PyQt") + # Все ранее написанное выводится на экран + w.show() + # Настройка + sys.exit(app.exec_()) + +if __name__ == '__main__': + window() + +``` + +Для того, чтобы получить более продвинутые функции приложения в pyqt, нам необходимо +обратить внимание на создание дополнительных элементов. Ниже представлено создание всплывающего диалогового окна, которое просит пользователя подтвердить его решение или предоставить какую-либо +информацию. + +```Python +import sys +from PyQt4.QtGui import * +from PyQt4.QtCore import * + + +def window(): + app = QApplication(sys.argv) + w = QWidget() + # Создайте кнопку и прикрепите ее к виджету w + b = QPushButton(w) + b.setText("Press me") + b.move(50, 50) + # Укажите b вызвать эту функцию при клике мышкой + # Заметьте, что в вызове функции отсутствуют "()" + b.clicked.connect(showdialog) + w.setWindowTitle("PyQt Dialog") + w.show() + sys.exit(app.exec_()) + +Данная функция должна создавать диалоговое окно с кнопкой, которая ждет клика по себе +и затем завершает программу. + +def showdialog(): + d = QDialog() + b1 = QPushButton("ok", d) + b1.move(50, 50) + d.setWindowTitle("Dialog") + # Эта модальность сообщает всплывающему окну блокировать родительский элемент, пока он активен + d.setWindowModality(Qt.ApplicationModal) + # Процесс завершается по клику мышкой + b1.clicked.connect(sys.exit) + d.exec_() + +if __name__ == '__main__': + window() +``` -- cgit v1.2.3 From 2b47f2f00f4b34e3e66718b49442291e3436b7be Mon Sep 17 00:00:00 2001 From: ven Date: Wed, 5 Apr 2017 12:06:04 +0200 Subject: followup #2697 --- ru-ru/pyqt-ru.html.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'ru-ru') diff --git a/ru-ru/pyqt-ru.html.markdown b/ru-ru/pyqt-ru.html.markdown index 7693551c..8a382833 100644 --- a/ru-ru/pyqt-ru.html.markdown +++ b/ru-ru/pyqt-ru.html.markdown @@ -2,7 +2,9 @@ category: tool tool: PyQT filename: learnpyqt-ru.py -translator: +contributors: + - ["Nathan Hughes", "https://github.com/sirsharpest"] +translators: - ["Vadim Toptunov", "https://github.com/VadimToptunov"] --- -- cgit v1.2.3 From e99782a6ca5d5b086808aeebf6603b2fa9c52eb3 Mon Sep 17 00:00:00 2001 From: Vadim Toptunov Date: Wed, 5 Apr 2017 16:50:44 +0300 Subject: Create kotlin-ru.html.markdown (#2698) --- ru-ru/kotlin-ru.html.markdown | 372 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 372 insertions(+) create mode 100644 ru-ru/kotlin-ru.html.markdown (limited to 'ru-ru') diff --git a/ru-ru/kotlin-ru.html.markdown b/ru-ru/kotlin-ru.html.markdown new file mode 100644 index 00000000..2a610568 --- /dev/null +++ b/ru-ru/kotlin-ru.html.markdown @@ -0,0 +1,372 @@ +--- +language: kotlin +translator: + - ["Vadim Toptunov", "https://github.com/VadimToptunov"] +filename: LearnKotlin-ru.kt +--- + +Kotlin - статистически типизированный язык для JVM, Android и браузера. Язык полностью cjdvtcnbv c Java. +[Более детальная информация здесь.](https://kotlinlang.org/) + +```kotlin +// Однострочные комментарии начинаются с // +/* +А вот так выглядят многострочные комментарии. +*/ + +// Ключевое слово "package" действует и используется // абсолютно также, как и в Java. +package com.learnxinyminutes.kotlin + +/* +Точкой входа в программу на языке Kotlin является функция "main". +Приведенная ниже функция передает массив, содержащий любые аргументы из командной строки. +*/ +fun main(args: Array) { + /* + Объявление значений производится с помощью или "var", или "val". + Значения объявленные с помощью "val" не могут быть изменены или перезаписаны, в то время как объявленные с помощью "var" - могут. + */ + val fooVal = 10 // мы не можем потом изменить значение fooVal на какое-либо иное + var fooVar = 10 + fooVar = 20 // значение fooVar затем может быть изменено. + + /* + В большинстве случаев Kotlin самостоятельно может определить тип переменной, поэтому нам не нужно явно указывать его каждый раз. + Мы можем явно объявить тип переменной следующим образом: + */ + val foo : Int = 7 + + /* + Строки могут быть представлены тем же образом, что и в Java. + Для экранирования используется обратный слэш. + */ + val fooString = "My String Is Here!" + val barString = "Printing on a new line?\nNo Problem!" + val bazString = "Do you want to add a tab?\tNo Problem!" + println(fooString) + println(barString) + println(bazString) + + /* + Необработанная строка разделяется тройной кавычкой ("""). + Необработанные строки могут содержать символы новой строки и любые другие символы. + */ + val fooRawString = """ +fun helloWorld(val name : String) { + println("Hello, world!") +} +""" + println(fooRawString) + + /* + Строки могут содержать в себе шаблонные выражения. + Шаблонные выражения начинаются со знака доллара ($). + */ + val fooTemplateString = "$fooString has ${fooString.length} characters" + println(fooTemplateString) + + /* + Переменная, которая содержит null должна быть явно обозначена как nullable. + Переменная может быть обозначена как nullable с помощью добавления знака вопроса(?) к ее типу. + Мы можем получить доступ к nullable переменной используя оператор ?. . + Для того, чтобы указать иное значение, если переменная является null, мы используем оператор ?: . + */ + var fooNullable: String? = "abc" + println(fooNullable?.length) // => 3 + println(fooNullable?.length ?: -1) // => 3 + fooNullable = null + println(fooNullable?.length) // => null + println(fooNullable?.length ?: -1) // => -1 + + /* + Функции могут быть объявлены с помощью ключевого слова "fun". + Аргументы функции указываются в скобках после имени функции. + Аргументы функции также могу иметь и значение по умолчанию. + Если требуется, то тип возвращаемого функцией значения, может быть указан после аргументов. + */ + fun hello(name: String = "world"): String { + return "Hello, $name!" + } + println(hello("foo")) // => Hello, foo! + println(hello(name = "bar")) // => Hello, bar! + println(hello()) // => Hello, world! + + /* + Параметр функции может быть отмечен с помощью ключевого слова "vararg", для того чтобы позволить аргументам попасть в функцию. + */ + fun varargExample(vararg names: Int) { + println("Argument has ${names.size} elements") + } + varargExample() // => Argument has 0 elements + varargExample(1) // => Argument has 1 elements + varargExample(1, 2, 3) // => Argument has 3 elements + + /* + Если функция состоит из одиночного выражения, фигурные скобки могут быть опущены. Тело функции указывается после знака = . + */ + fun odd(x: Int): Boolean = x % 2 == 1 + println(odd(6)) // => false + println(odd(7)) // => true + + // Если возвращаемый тип может быть выведен, то нам не нужно его дополнительно указывать. + fun even(x: Int) = x % 2 == 0 + println(even(6)) // => true + println(even(7)) // => false + + // Функции могут брать другие функции в качестве аргументов, а также могут возвращать функции. + fun not(f: (Int) -> Boolean): (Int) -> Boolean { + return {n -> !f.invoke(n)} + } + // Именованные функции могут быть определены в качестве аргументов с помощью оператора :: . + val notOdd = not(::odd) + val notEven = not(::even) + // Lambda-выражения могут быть определены в качестве аргументов. + val notZero = not {n -> n == 0} + /* + Если lambda-выражение имеет только один параметр, то ее определение может быть опущено (вместе с ->). + Имя этого единственного параметра будет "it". + */ + val notPositive = not {it > 0} + for (i in 0..4) { + println("${notOdd(i)} ${notEven(i)} ${notZero(i)} ${notPositive(i)}") + } + + // Ключевое слово "class" используется для + // объявления классов. + class ExampleClass(val x: Int) { + fun memberFunction(y: Int): Int { + return x + y + } + + infix fun infixMemberFunction(y: Int): Int { + return x * y + } + } + /* + Чтобы создать новый экземпляр класса, нужно вызвать конструктор. + Обратите внимание, что в Kotlin нет ключевого слова "new". + */ + val fooExampleClass = ExampleClass(7) + // Функции-члены могут быть вызваны с использованием точечной нотации. + println(fooExampleClass.memberFunction(4)) // => 11 + /* + В случае, если функция была помечена ключевым словом "infix", она может быть вызвана с помощью инфиксной нотации. + */ + println(fooExampleClass infixMemberFunction 4) // => 28 + + /* + Data-классы - это компактный способ создать классы, которые лишь хранят данные. + Методы "hashCode"/"equals" и "toString" генерируютсяч автоматически. + */ + data class DataClassExample (val x: Int, val y: Int, val z: Int) + val fooData = DataClassExample(1, 2, 4) + println(fooData) // => DataClassExample(x=1, y=2, z=4) + + // Data-классы обладают функцией "copy". + val fooCopy = fooData.copy(y = 100) + println(fooCopy) // => DataClassExample(x=1, y=100, z=4) + + // Объекты могут быть деструктурированы на множество переменных. + val (a, b, c) = fooCopy + println("$a $b $c") // => 1 100 4 + + // Деструктурирование в цикле "for" + for ((a, b, c) in listOf(fooData)) { + println("$a $b $c") // => 1 100 4 + } + + val mapData = mapOf("a" to 1, "b" to 2) + // Map.Entry также может быть дествуктурирован + for ((key, value) in mapData) { + println("$key -> $value") + } + + // Функция "with" аналогична оператору "with" в JavaScript. + data class MutableDataClassExample (var x: Int, var y: Int, var z: Int) + val fooMutableData = MutableDataClassExample(7, 4, 9) + with (fooMutableData) { + x -= 2 + y += 2 + z-- + } + println(fooMutableData) // => MutableDataClassExample(x=5, y=6, z=8) + + /* + Можно создать список с помощью функции "ListOf". + Этот список будет неизменяемым, т.е. элементы не могут быть удалены или добавлены в него. + */ + val fooList = listOf("a", "b", "c") + println(fooList.size) // => 3 + println(fooList.first()) // => a + println(fooList.last()) // => c + // Элементы списка доступны по их индексу в нем. + println(fooList[1]) // => b + + // Изменяемый список может быть создан спомощью функции "mutableListOf". + val fooMutableList = mutableListOf("a", "b", "c") + fooMutableList.add("d") + println(fooMutableList.last()) // => d + println(fooMutableList.size) // => 4 + + // Мы можем создать набор, используя функцию "setOf". + val fooSet = setOf("a", "b", "c") + println(fooSet.contains("a")) // => true + println(fooSet.contains("z")) // => false + + // Мы можем создать отображение (map), используя функцию "mapOf". + val fooMap = mapOf("a" to 8, "b" to 7, "c" to 9) + // Получить доступ к значениям отображения (map) можно с помощью их ключа. + println(fooMap["a"]) // => 8 + + /* + Последовательности представляют собой коллекции с ленивой оценкой. + Мы можем создать последовательность, используя функцию "generateSequence". + */ + val fooSequence = generateSequence(1, { it + 1 }) + val x = fooSequence.take(10).toList() + println(x) // => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + + // Пример использования последовательности для генерации чисел Фибоначчи: + fun fibonacciSequence(): Sequence { + var a = 0L + var b = 1L + + fun next(): Long { + val result = a + b + a = b + b = result + return a + } + + return generateSequence(::next) + } + val y = fibonacciSequence().take(10).toList() + println(y) // => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] + + // Kotlin предоставляет функции высшего порядка для работы с коллекциями. + val z = (1..9).map {it * 3} + .filter {it < 20} + .groupBy {it % 2 == 0} + .mapKeys {if (it.key) "even" else "odd"} + println(z) // => {odd=[3, 9, 15], even=[6, 12, 18]} + + // Цикл "for" может использоваться со всем, что предоставляет итератор. + for (c in "hello") { + println(c) + } + + // Циклы "while" работают также, как и в других языках. + var ctr = 0 + while (ctr < 5) { + println(ctr) + ctr++ + } + do { + println(ctr) + ctr++ + } while (ctr < 10) + + /* + "if" может быть использован в качестве выражения, которое возвращает значение. + По этой причине в Kotlin тернарный оператор ?: не нужен. + */ + val num = 5 + val message = if (num % 2 == 0) "even" else "odd" + println("$num is $message") // => 5 is odd + + // "when" может быть использован как альтернатива цепочке "if-else if". + val i = 10 + when { + i < 7 -> println("first block") + fooString.startsWith("hello") -> println("second block") + else -> println("else block") + } + + // "when" может быть использован с аргументами. + when (i) { + 0, 21 -> println("0 or 21") + in 1..20 -> println("in the range 1 to 20") + else -> println("none of the above") + } + + // "when" также может быть использовано как функция, возвращающая значение. + var result = when (i) { + 0, 21 -> "0 or 21" + in 1..20 -> "in the range 1 to 20" + else -> "none of the above" + } + println(result) + + /* + Мы можем проверить, что объект принадлежит к определенному типу, используя оператор "is". + Если объект проходит проверку типа, то он может использоваться как этот тип без явной его передачи. + */ + fun smartCastExample(x: Any) : Boolean { + if (x is Boolean) { + // x is automatically cast to Boolean + return x + } else if (x is Int) { + // x is automatically cast to Int + return x > 0 + } else if (x is String) { + // x is automatically cast to String + return x.isNotEmpty() + } else { + return false + } + } + println(smartCastExample("Hello, world!")) // => true + println(smartCastExample("")) // => false + println(smartCastExample(5)) // => true + println(smartCastExample(0)) // => false + println(smartCastExample(true)) // => true + + // Smartcast также работает с блоком "when" + fun smartCastWhenExample(x: Any) = when (x) { + is Boolean -> x + is Int -> x > 0 + is String -> x.isNotEmpty() + else -> false + } + + /* + Расширения - это способ добавить новый функционал к классу. + Это то же самое, что методы расширений в C#. + */ + fun String.remove(c: Char): String { + return this.filter {it != c} + } + println("Hello, world!".remove('l')) // => Heo, word! + + println(EnumExample.A) // => A + println(ObjectExample.hello()) // => hello +} + +// Enum-классы схожи с типами enum в Java. +enum class EnumExample { + A, B, C +} + +/* +Ключевое слово "object" может использоваться для создания одноэлементных объектов. +Мы не можем его инстанцировать, но можем вызывать его уникальный экземпляр по имени. +Это похоже на одиночные объекты Scala. +*/ +object ObjectExample { + fun hello(): String { + return "hello" + } +} + +fun useObject() { + ObjectExample.hello() + val someRef: Any = ObjectExample // we use objects name just as is +} + +``` + +### Дальнейшее чтение: + +* [Учебные материалы по Kotlin](https://kotlinlang.org/docs/tutorials/) +* [TПопробуй Kotlin в своем браузере](http://try.kotlinlang.org/) +* [Список ресурсов по языку Kotlin](http://kotlin.link/) -- cgit v1.2.3 From af3ed540aab54f59f9654416e30d8f5a5906327c Mon Sep 17 00:00:00 2001 From: ven Date: Wed, 5 Apr 2017 15:51:33 +0200 Subject: fixup for #2698 --- ru-ru/kotlin-ru.html.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'ru-ru') diff --git a/ru-ru/kotlin-ru.html.markdown b/ru-ru/kotlin-ru.html.markdown index 2a610568..6b9afbca 100644 --- a/ru-ru/kotlin-ru.html.markdown +++ b/ru-ru/kotlin-ru.html.markdown @@ -1,8 +1,10 @@ --- language: kotlin -translator: - - ["Vadim Toptunov", "https://github.com/VadimToptunov"] filename: LearnKotlin-ru.kt +contributors: + - ["S Webber", "https://github.com/s-webber"] +translators: + - ["Vadim Toptunov", "https://github.com/VadimToptunov"] --- Kotlin - статистически типизированный язык для JVM, Android и браузера. Язык полностью cjdvtcnbv c Java. -- cgit v1.2.3 From 60c11f43c4672a6c629944bb76df2a337b3af057 Mon Sep 17 00:00:00 2001 From: Vadim Toptunov Date: Wed, 5 Apr 2017 17:36:50 +0300 Subject: Ammended a typo in links (#2699) --- ru-ru/kotlin-ru.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ru-ru') diff --git a/ru-ru/kotlin-ru.html.markdown b/ru-ru/kotlin-ru.html.markdown index 6b9afbca..de04edae 100644 --- a/ru-ru/kotlin-ru.html.markdown +++ b/ru-ru/kotlin-ru.html.markdown @@ -370,5 +370,5 @@ fun useObject() { ### Дальнейшее чтение: * [Учебные материалы по Kotlin](https://kotlinlang.org/docs/tutorials/) -* [TПопробуй Kotlin в своем браузере](http://try.kotlinlang.org/) +* [Попробуй Kotlin в своем браузере](http://try.kotlinlang.org/) * [Список ресурсов по языку Kotlin](http://kotlin.link/) -- cgit v1.2.3 From 02c59f448c63ed4b6e57ed28ee969b8e06126741 Mon Sep 17 00:00:00 2001 From: Adam Bard Date: Wed, 12 Apr 2017 13:55:26 -0700 Subject: Update pyqt-ru.html.markdown --- ru-ru/pyqt-ru.html.markdown | 1 + 1 file changed, 1 insertion(+) (limited to 'ru-ru') diff --git a/ru-ru/pyqt-ru.html.markdown b/ru-ru/pyqt-ru.html.markdown index 8a382833..24afc03d 100644 --- a/ru-ru/pyqt-ru.html.markdown +++ b/ru-ru/pyqt-ru.html.markdown @@ -1,6 +1,7 @@ --- category: tool tool: PyQT +lang: ru-ru filename: learnpyqt-ru.py contributors: - ["Nathan Hughes", "https://github.com/sirsharpest"] -- cgit v1.2.3 From 61d3c1a05d3bdeb6340d7ead502c44fda3c80a8a Mon Sep 17 00:00:00 2001 From: Adam Bard Date: Wed, 12 Apr 2017 13:58:35 -0700 Subject: Update kotlin-ru.html.markdown --- ru-ru/kotlin-ru.html.markdown | 1 + 1 file changed, 1 insertion(+) (limited to 'ru-ru') diff --git a/ru-ru/kotlin-ru.html.markdown b/ru-ru/kotlin-ru.html.markdown index de04edae..21a14aee 100644 --- a/ru-ru/kotlin-ru.html.markdown +++ b/ru-ru/kotlin-ru.html.markdown @@ -1,6 +1,7 @@ --- language: kotlin filename: LearnKotlin-ru.kt +lang: ru-ru contributors: - ["S Webber", "https://github.com/s-webber"] translators: -- cgit v1.2.3 From f4940fcc2ebacf9d019526b179fdd77afe5d5253 Mon Sep 17 00:00:00 2001 From: Vitaly Volynsky Date: Thu, 11 May 2017 00:09:16 +0600 Subject: =?UTF-8?q?[c/ru]=20Fix=20typo:=20"=D0=B1=D0=BE=D0=BB=D1=8C=D1=88?= =?UTF-8?q?=D0=B8=D0=BD=D1=81=D1=82=D0=B2=D0=BE=D0=B0"=20->=20"=D0=B1?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D1=88=D0=B8=D0=BD=D1=81=D1=82=D0=B2=D0=B0"?= =?UTF-8?q?=20(#2723)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [c/ru] Fix typo: "большинствоа" -> "большинства" * [c/ru] Fix typo: "лигическое" -> "логическое" * [c/ru] Fix typos --- ru-ru/c-ru.html.markdown | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'ru-ru') diff --git a/ru-ru/c-ru.html.markdown b/ru-ru/c-ru.html.markdown index ab4be57e..71e41ee3 100644 --- a/ru-ru/c-ru.html.markdown +++ b/ru-ru/c-ru.html.markdown @@ -11,7 +11,7 @@ lang: ru-ru Что ж, Си всё ещё является лидером среди современных высокопроизводительных языков. -Для большинствоа программистов, Си – это самый низкоуровневый язык на котором они когда-либо писали, +Для большинства программистов, Си – это самый низкоуровневый язык на котором они когда-либо писали, но этот язык даёт больше, чем просто повышение производительности. Держите это руководство в памяти и вы сможете использовать Си максимально эффективно. @@ -170,7 +170,7 @@ int main() { !0; // => 1 1 && 1; // => 1 (логическое И) 0 && 1; // => 0 - 0 || 1; // => 1 (лигическое ИЛИ) + 0 || 1; // => 1 (логическое ИЛИ) 0 || 0; // => 0 // Битовые операторы @@ -229,7 +229,7 @@ int main() { switch (some_integral_expression) { case 0: // значения должны быть целыми константами (и могут быть выражениями) do_stuff(); - break; // если не написать break; то управление будет передено следующему блоку + break; // если не написать break; то управление будет передано следующему блоку case 1: do_something_else(); break; @@ -247,7 +247,7 @@ int main() { // Каждое выражение в Си имеет тип, но вы можете привести один тип к другому, // если хотите (с некоторыми искажениями). - int x_hex = 0x01; // Вы можете назначать переменные с помощью шеснадцатеричного кода. + int x_hex = 0x01; // Вы можете назначать переменные с помощью шестнадцатеричного кода. // Приведение типов будет пытаться сохранять цифровые значения. printf("%d\n", x_hex); // => Prints 1 @@ -288,14 +288,14 @@ int main() { // Для того, чтобы получить значение по адресу, напечатайте * перед именем. // Да, * используется при объявлении указателя и для получении значения по адресу // немного запутано, но вы привыкнете. - printf("%d\n", *px); // => Напечаатет 0, значение перемененной x + printf("%d\n", *px); // => Напечатает 0, значение перемененной x // Вы также можете изменять значение, на которое указывает указатель. (*px)++; // Инкрементирует значение на которое указывает px на единицу printf("%d\n", *px); // => Напечатает 1 printf("%d\n", x); // => Напечатает 1 - // Массивы удобно использовать для болшого количества однотипных данных. + // Массивы удобно использовать для большого количества однотипных данных. int x_array[20]; int xx; for (xx = 0; xx < 20; xx++) { @@ -308,7 +308,7 @@ int main() { // Это работает, потому что при обращении к имени массива возвращается // указатель на первый элемент. // Например, когда массив передаётся в функцию или присваивается указателю, он - // невявно преобразуется в указатель. + // неяввно преобразуется в указатель. // Исключения: когда массив является аргументом для оператор '&': int arr[10]; int (*ptr_to_arr)[10] = &arr; // &arr не является 'int *'! @@ -457,7 +457,7 @@ int area(const rect *r) { void str_reverse_through_pointer(char *str_in) { // Определение функции через указатель. - void (*f)(char *); // Сигнатура должна полность совпадать с целевой функцией. + void (*f)(char *); // Сигнатура должна полностью совпадать с целевой функцией. f = &str_reverse; // Присвоить фактический адрес (во время исполнения) // "f = str_reverse;" тоже будет работать. //Имя функции (как и массива) возвращает указатель на начало. -- cgit v1.2.3 From d30d6f69ca07014efdce95d771403a43423d2143 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Vitor=20Verona=20Biazibetti?= Date: Fri, 19 May 2017 18:34:27 -0300 Subject: [Kotlin/all] Remove whitespace in variable declaration with explicit type (#2733) * Removed whitespace in variable declaration with explicit type (Kotlin) * Removed whitespace in variable declaration with explicit type (Kotlin translations) --- ru-ru/kotlin-ru.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ru-ru') diff --git a/ru-ru/kotlin-ru.html.markdown b/ru-ru/kotlin-ru.html.markdown index 21a14aee..21940e41 100644 --- a/ru-ru/kotlin-ru.html.markdown +++ b/ru-ru/kotlin-ru.html.markdown @@ -37,7 +37,7 @@ fun main(args: Array) { В большинстве случаев Kotlin самостоятельно может определить тип переменной, поэтому нам не нужно явно указывать его каждый раз. Мы можем явно объявить тип переменной следующим образом: */ - val foo : Int = 7 + val foo: Int = 7 /* Строки могут быть представлены тем же образом, что и в Java. -- cgit v1.2.3 From a2ee84b2010691d7a54a9b335b12e92b366c7eae Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Thu, 1 Jun 2017 17:31:14 +0800 Subject: fix broken URL for vim (#2744) --- ru-ru/vim-ru.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ru-ru') diff --git a/ru-ru/vim-ru.html.markdown b/ru-ru/vim-ru.html.markdown index 6f62fd49..f43f99eb 100644 --- a/ru-ru/vim-ru.html.markdown +++ b/ru-ru/vim-ru.html.markdown @@ -9,7 +9,7 @@ filename: LearnVim-ru.txt lang: ru-ru --- -[Vim](www.vim.org) +[Vim](http://www.vim.org) (Vi IMproved) это клон полулярного текстового редактора для Unix. Он разработан с целью повышения скорости и продуктивности и повсеместно используется в большинство Юникс-подобных систем. В нем имеется множество клавиатурных -- cgit v1.2.3 From 5b4c74365c4ac07fd2b3ee9f4a95a42664e4f3f5 Mon Sep 17 00:00:00 2001 From: ranwise Date: Sun, 18 Jun 2017 22:49:03 +0300 Subject: Fix typo (#2764) --- ru-ru/css-ru.html.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'ru-ru') diff --git a/ru-ru/css-ru.html.markdown b/ru-ru/css-ru.html.markdown index 2e2d40b7..e0e5e30b 100644 --- a/ru-ru/css-ru.html.markdown +++ b/ru-ru/css-ru.html.markdown @@ -116,7 +116,7 @@ element:visited {} /* или еще не проходил по ней */ element:link {} -/* выбранное поле воода (input) */ +/* выбранное поле ввода (input) */ element:focus {} @@ -132,7 +132,7 @@ selector { width: 200px; /* пиксели */ font-size: 20pt; /* пункты */ width: 5cm; /* сантиметры */ - min-width: 50mm; /* милиметры */ + min-width: 50mm; /* миллиметры */ max-width: 5in; /* дюймы */ height: 0.2vh; /* умножается на высоту окна браузера (CSS3) */ width: 0.4vw; /* умножается на ширину окна браузера (CSS3) */ @@ -235,7 +235,7 @@ p { property: value !important; } ## Совместимость -Несмотря на то, что большая часть функций CSS2 (а также CSS3) подеррживается всеми +Несмотря на то, что большая часть функций CSS2 (а также CSS3) поддерживается всеми браузерами и устройствами, не забывайте проверять совместимость CSS-правил с современными браузерами. -- cgit v1.2.3 From 362135e6bc78a48acb8610b9956d87193680c5cb Mon Sep 17 00:00:00 2001 From: Nomadic Date: Tue, 4 Jul 2017 16:02:46 +0300 Subject: [nim/ru] Translation Nim to russian (#2778) * Translation Nim to russian * EN tag for all links --- ru-ru/nim-ru.html.markdown | 279 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 279 insertions(+) create mode 100644 ru-ru/nim-ru.html.markdown (limited to 'ru-ru') diff --git a/ru-ru/nim-ru.html.markdown b/ru-ru/nim-ru.html.markdown new file mode 100644 index 00000000..d05583d7 --- /dev/null +++ b/ru-ru/nim-ru.html.markdown @@ -0,0 +1,279 @@ +--- +language: Nim +filename: learnNim-ru.nim +contributors: + - ["Jason J. Ayala P.", "http://JasonAyala.com"] + - ["Dennis Felsing", "http://felsin9.de/nnis/"] +translators: + - ["Nomadic", "https://github.com/n0madic"] +lang: ru-ru +--- + +Nim (ранее известный, как Nimrod) — язык программирования со статической +типизацией, поддерживающий процедурный, объектно-ориентированный, +функциональный и обобщённый стили программирования. + +Nim эффективный, выразительный и элегантный. + +```nim +var # Объявление (и присваивание) переменных, + letter: char = 'n' # с указанием типа или без + lang = "N" & "im" + nLength : int = len(lang) + boat: float + truth: bool = false + +let # Используйте let *сразу* для объявления и связывания переменных. + legs = 400 # legs неизменяемый. + arms = 2_000 # Символ _ игнорируется и удобен для длинных чисел. + aboutPi = 3.15 + +const # Константы вычисляются во время компиляции. Это обеспечивает + debug = true # производительность и полезно в выражениях этапа компиляции. + compileBadCode = false + +when compileBadCode: # `when` это `if` этапа компиляции. + legs = legs + 1 # Эта ошибка никогда не будет скомпилирована. + const input = readline(stdin) # Значения констант должны быть известны во + # время компиляции. + +discard 1 > 2 # Примечание. Компилятор будет жаловаться, если результат + # выражения не используется. `discard` обходит это. + +discard """ +Это может использоваться как многострочный комментарий. +Или для не поддающегося синтаксическому анализу, сломанного кода +""" + +# +# Структуры данных +# + +# Кортежи + +var + child: tuple[name: string, age: int] # Кортежи определяют *как* имя поля + today: tuple[sun: string, temp: float] # так *и* порядок полей. + +child = (name: "Rudiger", age: 2) # Присвоить все сразу литералом () +today.sun = "Overcast" # или отдельно по полям. +today.temp = 70.1 + +# Последовательности + +var + drinks: seq[string] + +drinks = @["Water", "Juice", "Chocolate"] # @[V1,..,Vn] является литералом + # последовательности + +drinks.add("Milk") + +if "Milk" in drinks: + echo "We have Milk and ", drinks.len - 1, " other drinks" + +let myDrink = drinks[2] + +# +# Определение типов +# + +# Определение собственных типов позволяет компилятору работать на вас. +# Это то, что делает статическую типизацию мощной и полезной. + +type + Name = string # Псевдоним типа дает вам новый тип, который равнозначен + Age = int # старому типу, но более нагляден. + Person = tuple[name: Name, age: Age] # Определение структур данных. + AnotherSyntax = tuple + fieldOne: string + secondField: int + +var + john: Person = (name: "John B.", age: 17) + newage: int = 18 # Было бы лучше использовать Age, чем int + +john.age = newage # Но это все же работает, потому что int и Age синонимы. + +type + Cash = distinct int # `distinct` делает новый тип несовместимым с его + Desc = distinct string # базовым типом. + +var + money: Cash = 100.Cash # `.Cash` преобразует int в наш тип + description: Desc = "Interesting".Desc + +when compileBadCode: + john.age = money # Error! age is of type int and money is Cash + john.name = description # Компилятор говорит: "Нельзя!" + +# +# Дополнительные типы и структуры данных +# + +# Перечисления позволяют типу иметь одно из ограниченного числа значений + +type + Color = enum cRed, cBlue, cGreen + Direction = enum # Альтернативный формат + dNorth + dWest + dEast + dSouth +var + orient = dNorth # `orient` имеет тип Direction, со значением `dNorth` + pixel = cGreen # `pixel` имеет тип Color, со значением `cGreen` + +discard dNorth > dEast # Перечисления обычно являются "порядковыми" типами + +# Поддиапазоны определяют ограниченный допустимый диапазон + +type + DieFaces = range[1..20] # Допустимым значением являются только int от 1 до 20 +var + my_roll: DieFaces = 13 + +when compileBadCode: + my_roll = 23 # Error! + +# Arrays + +type + RollCounter = array[DieFaces, int] # Массивы фиксированной длины и + DirNames = array[Direction, string] # индексируются любым порядковым типом. + Truths = array[42..44, bool] +var + counter: RollCounter + directions: DirNames + possible: Truths + +possible = [false, false, false] # Массивы создаются литералом [V1,..,Vn] +possible[42] = true + +directions[dNorth] = "Ahh. The Great White North!" +directions[dWest] = "No, don't go there." + +my_roll = 13 +counter[my_roll] += 1 +counter[my_roll] += 1 + +var anotherArray = ["Default index", "starts at", "0"] + +# Доступны другие структуры данных, в том числе таблицы, множества, +# списки, очереди и crit-bit деревья. +# http://nim-lang.org/docs/lib.html#collections-and-algorithms (EN) + +# +# IO и поток управления выполнением +# + +# `case`, `readLine()` + +echo "Read any good books lately?" +case readLine(stdin) +of "no", "No": + echo "Go to your local library." +of "yes", "Yes": + echo "Carry on, then." +else: + echo "That's great; I assume." + +# `while`, `if`, `continue`, `break` + +import strutils as str # http://nim-lang.org/docs/strutils.html (EN) +echo "I'm thinking of a number between 41 and 43. Guess which!" +let number: int = 42 +var + raw_guess: string + guess: int +while guess != number: + raw_guess = readLine(stdin) + if raw_guess == "": continue # Пропустить эту итерацию + guess = str.parseInt(raw_guess) + if guess == 1001: + echo("AAAAAAGGG!") + break + elif guess > number: + echo("Nope. Too high.") + elif guess < number: + echo(guess, " is too low") + else: + echo("Yeeeeeehaw!") + +# +# Итерации (циклы) +# + +for i, elem in ["Yes", "No", "Maybe so"]: # Или просто `for elem in` + echo(elem, " is at index: ", i) + +for k, v in items(@[(person: "You", power: 100), (person: "Me", power: 9000)]): + echo v + +let myString = """ +an +`string` to +play with +""" # Многострочная "сырая" строка + +for line in splitLines(myString): + echo(line) + +for i, c in myString: # Индекс и символ. Или `for j in` только для символов + if i mod 2 == 0: continue # Компактная форма `if` + elif c == 'X': break + else: echo(c) + +# +# Процедуры +# + +type Answer = enum aYes, aNo + +proc ask(question: string): Answer = + echo(question, " (y/n)") + while true: + case readLine(stdin) + of "y", "Y", "yes", "Yes": + return Answer.aYes # Перечисления могут быть квалифицированы + of "n", "N", "no", "No": + return Answer.aNo + else: echo("Please be clear: yes or no") + +proc addSugar(amount: int = 2) = # Значение поумолчанию 2, ничего не возвращает + assert(amount > 0 and amount < 9000, "Crazy Sugar") + for a in 1..amount: + echo(a, " sugar...") + +case ask("Would you like sugar in your tea?") +of aYes: + addSugar(3) +of aNo: + echo "Oh do take a little!" + addSugar() +# Здесь нет необходимости в `else`. Возможны только `yes` и `no`. + +# +# FFI (интерфейс внешних функций) +# + +# Так как Nim компилируется в C, то FFI делается очень просто: + +proc strcmp(a, b: cstring): cint {.importc: "strcmp", nodecl.} + +let cmp = strcmp("C?", "Easy!") +``` + +Кроме того, Nim выделяется среди себе подобных метапрограммированием, +производительностью, функциями этапа компиляции. + +## Дальнейшее чтение (EN) + +* [Домашняя страница](http://nim-lang.org) +* [Скачать](http://nim-lang.org/download.html) +* [Сообщество](http://nim-lang.org/community.html) +* [FAQ](http://nim-lang.org/question.html) +* [Документация](http://nim-lang.org/documentation.html) +* [Руководство](http://nim-lang.org/docs/manual.html) +* [Стандартная библиотека](http://nim-lang.org/docs/lib.html) +* [Rosetta Code](http://rosettacode.org/wiki/Category:Nim) -- cgit v1.2.3