Мова програмування d: контрактне програмування

Відео: Мова D. Контракти. Частина 1. Assert

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

В С ++ структури і класи - це практично одне і те ж. В D2 вони кардинально відрізняються. Структури (struct) - це тип даних, ініціалізіруемих статично і передається за значенням, що не володіє властивостями успадкування та поліморфізму. Класи (class) - навпаки, завжди створюються оператором new і передаються тільки по посиланню. Класи успадковуються і мають поліморфізмом.

У D принципово не можна помилково створити клас статично, а потім довго мучитися через те, що не працюють методи його базових класів, як в С ++.

Не треба й явно працювати з поліморфними покажчиками на клас - це робиться неявно «під капотом». Немає і оператора «-gt;» - він просто не потрібен.

контрактне програмування

Останнім часом контрактне програмування стає все більш популярним способом збільшити надійність програм.

Його суть полягає в тому, що на частину програми (клас, метод або функцію) накладається ряд логічних обмежень, званих контрактами, які повинні бути істинними під час виконання програми.




Код контрактів автоматично виключається з release-версії програми, тому важливо розуміти, що єдине призначення контрактів - перевірка коду на «дурнів та ідіотів» під час тестування і налагодження. В D2 є кілька конструкцій контрактного програмування. Найпростіша - це директива assert, тіло якої має бути істинним виразом:
assert (expression) -

Мова програмування D: контрактне програмування

На відміну від С ++ вона вбудована в мову і генерує виняток AssertError при порушенні. Наступний тип контракту -пре- і пост-умови, які зазвичай використовуються для перевірки аргументів і результату функції:



long square_root (long x) in {
assert (x gt; = 0);
}
out (result) {
assert ((result * result) = x);
}
body {
return cast (long) std.math.sqrt (cast (real) x);
}

Блок in примусово виконується перед блоком body, а блок out - після нього. «Магічна» змінна result отримує значення, яке функцією. Останній тип контрактів - інваріанти класів:
class Date {int day- int hour;
invariant () {
assert (1 lt; = day ss day lt; = 31) - assert (0 lt; = hour ss hour lt; 24);
}
}

Код інваріанта викликається після конструктора, перед деструктором, а також перед і після кожного виклику функції, оголошеної як public. В останній частині статті мова піде про стандартну бібліотеку phobos і будуть зроблені висновки про мову D.

ІНШЕ

Обробка подій в juce фото

Обробка подій в juce

Відео: Уроки javascript | Урок №13 - Події і обробник подій Переважна більшість тулкіта для С ++ (Gtk +, Qt,…

Мова програмування vala фото

Мова програмування vala

Hello world! Розгляд будь-якої мови програмування традиційно належить починати з найпростішої програми «Hello…

Мова програмування go фото

Мова програмування go

Відео: Топ-4 Кращих Мови програмування для Початківців | ТОП Мова програмування Go (https://qoianq.org/) з`явився в 2007…

Ultimate ++: перша програма фото

Ultimate ++: перша програма

Відео: Уроки C # (C sharp) | # 3 - Перша програма на C # Перейдемо до реального прикладу. Напишемо просту марну…

» » Мова програмування d: контрактне програмування