2016-08-30 3 views
1

Как я могу использовать оператор «=>» в булевых выражениях? Например, следующее объявление является неправильным, так как «IsOpen = IsOpen!» Возвращает логическое значение:Используйте оператор => в булевых выражениях

// not a good function declaration 
void toggle => isOpen = !isOpen; 

Я думал, в чем-то похожее на это:

void toggle => shutUp(isOpen = !isOpen); 

Где shutUp() является функция, возвращает значение void и принимает любые логические параметры.

ответ

2

Как это:

var isOpen = false; 
var toggle =() => isOpen = !isOpen; 
toggle(); 
print(isOpen); 
toggle(); 
print(isOpen); 
+0

Thansk. Странно, но это работает. – Cequiel

+0

=> x является сокращением для {return x; }. Таким образом, функция может быть записана как: toggle() => isOpen =! IsOpen; и анонимная функция такая же, просто без имени:() => isOpen =! isOpen ;. [Подробнее об этом здесь.] (Https://www.dartlang.org/resources/dart-tips/dart-tips-ep-7) – Alvis

+0

Это не странно, что он работает. Это почти то же самое, что 'bool toggle() => isOpen =! IsOpen;', только написанный более запутанным способом. Способ, который, вероятно, также не работает для методов - вы не можете реализовать подпрограмму 'void toggle()' с помощью 'var toggle'. Я не рекомендую использовать это решение. – lrn

1

Dart язык позволяет использовать выражение в качестве функции.
Эта функция называется выражением функции.
Эта функция позволяет, чтобы выражение могло иметь параметры.

Пример.

void main() { 
    var sum = (a, b) => a + b; // <==== function expression 
    for (int i = 0; i < 5; i++) { 
    print(sum(i, i)); 
    } 
} 

В этом случае лексемы => не означает, что оператор. Это означает лексему, которая знаменует начало тела функции (выражения функции).

Это не единственный возможный синтаксис для использования выражений функции. Это был просто пример понимания.

1

Вы не должны использовать => для функций пустоты.

Как пишет Мезони, => e является сокращенным обозначением для { return e; }. Вы не должны писать return e в функции void, поэтому вы также не должны использовать =>.

Просто написать:

void toggle() { isOpen = !isOpen; }