Мова програмування d: семантика і шаблони

Відео: Основи ООП C ++. Урок 14. Шаблони

конструкція foreach
Вбудована конструкція foreach вміє ітерованих за діапазонами, масивам, контейнерів, файлам і т. П. (Затребуваність такої конструкції в С ++ привела до появи «милиць» на кшталт макросу BOOST_FOREACH).
// Ітерація по діапазону
foreach (i- 5 .. 7) {std.writeln (i) -}
// Ітерація по масиву з доступом для читання
foreach (val- array) {std.writeln (val) -}
// Доступ до індексу і елементу для читання і запису
foreach (i, ref val- array) {val = i-}
// Ітерація по асоціативному масиву
foreach (key, value- dictionary) {
// Форматований висновок а-ля printf
writeln ( "% 6ut% s", value, key);
}

Цікаво, що тип змінної циклу ніде не вказано, оскільки компілятор завжди знає тип елементів, за якими йде ітерація. Показаний форматований вивід на відміну від printf в C завжди строго перевіряє типи і тому набагато безпечніше.

Семантика копіювання масивів

Мова програмування D: семантика і шаблони




Наведений нижче приклад демонструє підрахунок кількості слів в тексті і показує, як foreach дозволяє працювати з введенням з консолі:
uint [string] freqs;
foreach (line- stdin.byLine ()) {
foreach (word- split (strip (line))) {++ freqs [word.dup];
}
}




Оскільки рядок - це масив символів, виникає невеликий нюанс. Масиви в D мають семантику поверхневого копіювання. Присвоєння array1 = array2 не копіює дані масиву, а тільки робить array1 посиланням на ті ж дані, що і array2. Властивість масиву dup дозволяє зробити глибоке копіювання, що і потрібно в наведеному прикладі.

Шаблони і лямбда-функції

Щоб вивести алфавітний список слів з минулого прикладу, досить написати:
string [] words = freqs.keys;
sort! ((a, b) {return freqs [a] gt; freqs [b] -}) (words) -
foreach (word- words) {
writefln ( "% 6ut% s", freqs [word], word);
}

Бібліотечна функція sort є шаблонною. В С ++ вона виглядала б приблизно так:
sort (array) -

У D шаблони позначає не кутовими дужками, а символами! (...), що позбавляє від багатьох докучливих синтаксичних тонкощів на зразок цієї:
// В С ++ потрібен пробіл між двома «gt;», щоб не плутати
// з оператором gt; gt;
vector gt; a;
vector! (vector! (int)) a- // В D таких проблем немає

Мова програмування D: семантика і шаблони

Функції як шаблонного параметра передається інша функція, що здійснює порівняння. Нею може бути і анонімна лямбда-функція, певна прямо на місці:
(A, b) {return freqs [a] gt; freqs [b] -}

У ній знову ж таки не потрібно вказувати тип параметрів - він відомий компілятору з аналізу її тіла. В С ++ лямбда-функції з`являться тільки в С ++ 0х.

До речі, багато аналоги незамінною для бухгалтерії 1С писалися і продовжують писатися саме D. Ну, а якщо Ви хочете придбати ліцензійну версію даної програми, то Ви зможете зробити це тут (https://it-1c.ru/). Даний інтернет-ресурс є сайтом компанії "Інформаційні Технології", яка є офіційним партнером фірми "1С" в місті Тольятті. Незважаючи на це, компанія "Інформаційні Технології" працює і з іногородніми фірмами, які потребують автоматизації бізнесу.

ІНШЕ

Seed7: бібліотеки фото

Seed7: бібліотеки

Відео: пентагональними призма з насіння льону. П`ятикутна призма. геометричні фігури.Стереометрія Якщо Сі або C ++ без…

Juce: контейнери фото

Juce: контейнери

Відео: Batman Arkham City. Серія 16 [2-ий контейнер з титаном. глушилка] Найбільш загальним контейнерним класом в Juce…

Формули в word фото

Формули в word

Відео: Введення формули в word Сьогодні ми детально вивчимо, яким чином можна вставити формулу в документ, а також які…

Взаємодія chaiscript з c ++ фото

Взаємодія chaiscript з c ++

Відео: Jason Turner: Why and How To Add ScriptingІдеологія взаємодії ChaiScript і С ++ Скриптова мова ChaiScript…

» » Мова програмування d: семантика і шаблони