Лямбда-выражения и исключения
Ru | En
Как создать лямбда-выражение или замыкание
- Создайте лямбда-выражение, как обычно в JavaScript.
- Не объявляйте переменных.
В замыкании есть доступ ко внешним переменным. Здесь мы читаем переменную a. Мы увидим, что это работает, когда сгенерируем код для модуля и запустим приложение.
18
В данном лямбда-выражении есть присваивание. Ключевое слово var не требуется, потому что Drakon.Tech объявит переменную автоматически.
Имейте в виду, что генератор кода объявит переменную в функции, которая содержит лямбда-выражение, а не в самой лямбде. Это можно увидеть в коде.
function lambda() { var a, closure, foo, result; a = 10 closure = function (x) { foo = a + x return foo } result = closure(8) console.log(result) }
Что насчёт остальных конструкций языка JavaScript? Можно ли помещать конструкции if и for внутри лямбда-выражений в Drakon.Tech? Технически это возможно, но нежелательно.
Наличие конструкций if и for подразумевает алгоритм с нетривиальной логикой. Для отображения алгоритмов надо применять блок-схемы, а не лямбда-выражения.
А что если надо поместить сложный алгоритм в лямбда-выражение?
- Поместите алгоритм в отдельную функцию. Создайте для этого Дракон-схему.
- Создайте простое лямбда-выражение в одну строку.
- Вызовите функцию из шага 1 в этом лямбда-выражении.
Лямбда-выражения и замыкания обладают огромной выразительной мощью, но за эту мощь приходится платить. Каждый раз, когда читатель наталкивается на лямбда-выражение в коде, ему приходится делать дополнительное мысленное усилие. Старайтесь делать лямбда-выражения как можно проще и короче.
Как поймать исключение
- Вставьте конструкцию try-catch внутри иконы Действие, как обычно в программах на JavaScript.
- Не объявляйте переменных.
Все значение, присвоенные в блоке try-catch будут и далее доступны в функции.
Здесь переменная foo сохранит своё значение после выхода из блока try-catch.
Не применяйте try-catch в async-функциях
Обратите внимание, что Drakon.Tech не разрешает блоки try-catch в async-функциях. Чтобы поймать исключение в async-функции, используйте выражение on error goto X как описано здесь.