Введение, или краткий обзор — различия между версиями
Материал из Deeptown Manual
(→Ðолее ÑложнÑй пÑимеÑ) |
(→ÐÑполÑзование блоков) |
||
Строка 29: | Строка 29: | ||
This is way more helpful than aynhting else I've looked at. | This is way more helpful than aynhting else I've looked at. | ||
− | + | TGY2g7 <a href="http://mxqoofyrxayw.com/">mxqoofyrxayw</a> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | < | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | </ | + | |
− | + | ||
− | + | ||
== Расширение классов == | == Расширение классов == |
Версия 16:49, 2 сентября 2011
Содержание |
(Введение...)
Здравствуй, мир!
Классический пример программы, выводящей строку "Hello, world!" на экран, на языке K++ выглядит следующим образом:
<source lang="kpp" line="1"> package hello_world;
export function void main() {
print("Hello, world!\n");
} </source>
- 1
- Как уже отмечалось ранее, в K++ любая программа или библиотека является модулем. Ключевое слово package используется для объявления имени модуля, в который должна быть скомпилирована программа.
- 3-5
- Наконец, объявляется функция main(), которая вызывает системную функцию print() стандартной библиотеки, передав ей строку "Hello, world!\n" в качестве параметра. Пара символов \n является специальной последовательностью, которая в момент компиляции преобразуется в символ перевода строки.
- Ключевое слово export говорит о том, что имя функции не следует декорировать. Декорирование имен применяется для того, чтобы дать возможность перегружать функции с одинаковыми именами, но разными списками параметров (или параметрами разных типов), а так же для реализации пространств имен.
This is way more helpful than aynhting else I've looked at.
TGY2g7 <a href="http://mxqoofyrxayw.com/">mxqoofyrxayw</a>
Расширение классов
Приведенный выше пример можно переписать следующим образом:
<source lang="kpp" line="1"> package extend_demo;
extend int {
public const function void times(block b) { for (var n = 0; n < this; n++) b(n); }
}
export function void main() {
3.times() { |i| print((i to string) + " "); }; print("\n");
} </source>
- 3-8
- Оператор extend расширяет функционал класса — в данном случае класса int. Его использование аналогично объявлению класса, но объявленные внутри поля, методы и операторы будут добавлены к уже существующему классу.
- Таким образом, к классу int, объявленному в стандартной библиотеке, добавляется метод times(), вызывающий связанный блок количество раз, равное текущему числу (не забываем: мы добавляем метод в класс int, который отвечает за хранение числа).
- 11
- После такого объявления, в функции main() мы используем уже метод times() класса int: конструкция 3.times() означает создание объекта 3 класса int и вызов у этого объекта метода times().
Примечание: Расширение будет работать во всем модуле, а так же во всех модулях, которые импортируют данный модуль.