Данная статья представляет собой перевод документа Nemerle Quick Quide на русский язык
Nemerle. Краткое руководство. (Nemerle Quick Quide).
Это краткое руководство практически по всем особенностям Nemerle, специально для тех, кто переходит на Nemerle c C#
Содержание
- 1 Переменные
- 2 Списки
- 2.1 Понятие о списках
- 2.2 Полезные методы
- 3 Массивы
- 4 Кортежи
- 4.1 Тип Nemerle.Utility.Pair(Пара)
- 5 Условные операторы
- 6 Циклы
- 7 Исключения
- 8 Варианты
- 8.1 Перечисления
- Сопоставление с образцом
- 9.1 Точное соответствие
- 9.2 Соответствие списков
- 9.3 Шаблон для переменных
- 9.4 Шаблон для кортежей
- 9.5 Проверка типов
- 9.6 Шаблон Record (Запись)
- 9.7 Шаблон as
- 9.8 Шаблон указания типа
- 9.9 Оператор with (с)
- 9.10 Соответствие регулярных выражений
- 10 Ключевое слово Yield (выход)
- 11 Императивное программирование и блоки
- 12 Функции
- 13 Пространства имен
- 14 Доступность
- 18 Модификаторы
- 19 Конструкторы
- Макросы параллельности
- Аккорды
- Стандартная библиотека языка Nemerle
- Классы коллекций
- Расширения для строк и массивов
- Пространство имен Nemerle.IO
- Тип Option (настройка)
Переменные
- mutable a = 5;: переменные, объявленные как mutable (изменяемые), могут быть изменены в дальнейшем
- def b = 4;: обычные переменные не могут быть изменены. Для всех переменных работает вывод типов
- def c : float = 4;: явное указание типа
2 Списки
- def nil = [];: пустой список обозначается как []
- def numbers = [1, 2, 3];: создать список из указанных значений
- def more_numbers = 4 :: numbers; : :: добавить новый элемент в список
2.1 Понятие о списках
- $[ (x, y) | x in list1, y in list2, x < y]: вернуть все пары из приведенных списков, для которых условие верно
- $[1, 3 .. 8]: диапазон от 1 до 8 с шагом (3-1)
- $[1 .. 5]: список от 1 до 5 с шагом 1
- $[ (x, y) | x in [1 .. 3], y in [2, 4 .. 10] ]: создать все пары
2.2 Полезные методы
- Length, Head, Tail, Last, Nth
- FirstN: вернуть первые N элементов из списка
- ChopFirstN: вернуть список без первых N элементов
- LastN: вернуть последние N элементов
- Reverse
- Remove: удалить элемент
- Contains
- Iter (f : 'a -> void): выполнить функцию для всех элементов
- Map (f : 'a -> 'b): вернуть новый список ['b], выполняя функцию на всех элементах списка ['a]
- Group (f : 'a * 'a -> int): вернуть список списков, группируя в одном списке элементы, для которых функция возвращает одинаковые значения
- FoldLeft, FoldRight: возвращает результат выполнения функции рекурсивно, начиная с первого элемeнта в прямом или обратном порядке
- ForAll (f : 'a -> bool): возвращает значение «истина» (true), если все элементы возвращают значение «истина»
- Exists (f : 'a -> bool): возвращает значение «истина», если хотя бы одно применение функции для элементов возвращает значение «истина»
- Find (pred : 'a -> bool): ищет первый элемент, предикат которого имеет значение «истина»
- Filter (pred : 'a -> bool): возвращает новый список, содержащий все элементы, предикат которых имеет значение «истина»
- Sort (cmp : 'a * 'a -> bool): сортирует список на основании метода. Причина, лежащая в основе того, что функция возвращает целое число, заключается в том, что функции сравнения (CompareTo) в библиотеке .NET возвращют целое число. RemoveDuplicates
- ToArray преобразование в массив
3 Массивы
- def a = array(3);: определяет количество элементов
- def b = array[1, 2, 3]: определяет элементы
4 Кортежи
- def t = (1, "one");: кортеж - это набор значений, у которых нет имени для их распознавания
- def fst = t[0];: используйте индексы от 0 для получения элементов
4.1 Тип Nemerle.Utih3ty.Pair(Пара)
Этот класс содержит три методы для работы с парами (кортежами из двух значений):
- First and Second возвращает первый или второй элемент кортежа соответственно;
- Swap меняет местами оба элемента пары.
5 Условные операторы
- when (условие) код: выполняет код, если условие верно
- unless (условие) код: выполняет код, если условие верно
- if (условие) код1 else код2: выполняет код1 если условие верно, код2, если условие имеет значение «ложь»
6 Циклы
- for (mutable i = 0; i < 10; i++) код: цикл for, такой же как и в языке программирования С
- for (i in $[0..9]) код, похожий на приведенный выше, с использованием диапазона
- for (i in $[9,8..0]) код: обратный порядок
- while (condition) код: выполняет код, пока условие верно
- do код while (condition): то же, что и выше, но с проверкой условия в конце кода, поэтому код всегда выполняется по крайней мере один раз
- foreach (x in list) код: выполняет код для каждого x из перечислимого списка
- repeat (10) код: повторяет код указанное количество раз
7 Исключения
- throw ArgumentException();: выдает новое исключение требуемого типа
- Синтаксис обработчика try-catch-finally сходен с синтаксисом аналогичного обработчика в C#, хотя обработчик catch использует синтаксис на основе шаблонов соответствия:
try {код} catch { | e is ArgumentNullException => ... | e is OverflowException => ... | _ => ... } finally { // Код в секции finally выполняется всегда, // вне зависимости от возникновения исключений }
8 Варианты
- Создание варианта с пустыми настройками и настройками с дополнительной информацией variant Volume { | Max | Min | Other { v : int } }
- def v1 = Volume.Max ();: пустой конструктор используется при отсутствии настроек
- def v2 = Volume.Other (5);: конструктор для непустых элементов получает все поля как параметры, в том порядке, в котором они написаны в коде.
8.1 Перечисления
- Как и в C#, это просто хорошее выражение для целых чисел: enum Seasons { | Spring | Autumn | Winter | Summer }
Сопоставление с образцом
9.1 Точное соответствие
9.2 Соответствие списков
9.3 Шаблон для переменных
9.4 Шаблон для кортежей
9.5 Проверка типов
9.6 Шаблон Record (Запись)
9.7 Шаблон as
Версия текста: 0.9.0.4 (not full)
Дата: 2010-02-23
(С) Алексей Горбачев, 2006-2010