Использование цикла for в качестве условия в операторе if - PullRequest
0 голосов
/ 08 июня 2011

Есть ли способ использовать цикл for как условие?Примерно так?

if((for(int x = 0; x < 5; x++){if(x == 2){return true;}return false;}) == true)

Редактировать:

Еще один пример

if(for(int x = 0; x < 5; x++) == 2)

Я просто хотел узнать, можно ли это сделать.Я ожидаю, что ответы Благовеста Буюклиева и marzapower точны, основываясь на моем вопросе.Спасибо ТАК за полезные ответы.

Ответы [ 5 ]

2 голосов
/ 08 июня 2011

Это не имеет особого смысла, поскольку циклы C-ish являются просто структурами управления выполнением.Нет такого типа, который, как вы можете сказать, в общем случае имеют циклы.

Из ваших примеров мне кажется, что вы просите о возможности добавления простых встроенных функций без необходимости фактически идти куда-то еще и записыватьполная функция со своим именем и еще много чего.Они называются лямбда .

Если вы используете C, я бы предложил просто создавать небольшие функции (возможно, даже макросы), которые собирают и возвращают нужный вам тип.

Если вы используете C ++, в стандартной библиотеке есть некоторые вещи в <algorithm> и <functional>, которые могут вас заинтересовать. Для вашего данного примера, я думаю, find_if() сделает то, что вы ищете,Обычно этот материал больше подходит для PITA, чем он того стоит.Вы должны создать полноценный объект предиката, чтобы сделать это, что намного больше кода и работы, чем просто создание вашей однострочной функции было бы в первую очередь.

Boost добавляет поддержку лямбда в C ++, и следующий стандарт должен правильно добавить его в язык.

Большинство функциональных языков поддерживают лямбда-выражения, но обычно они не используют синтаксис C, подобный этому.

2 голосов
/ 08 июня 2011

Вероятно, это будет зависеть от того, на каком языке вы пишете свой код. Обычно циклы for не возвращают значение, если вы не включили их в анонимную функцию , также известную как лямбда-функция.

В ruby вы могли бы сделать что-то подобное следующим образом:

res = lambda {|array| for i in array do return true if i == 2 end }.call(0..4)

но в Java вы никогда не сможете легко сделать такую ​​вещь без определения нового метода.

Обновление

Вообще говоря, процедурные методы (такие как ruby, perl, python, lisp и т. Д.) Предоставят вам встроенные методы для обработки анонимных функций, в то время как другие языки, такие как C, C++, Java и т. Д. Не имеют этих характеристик.

Кстати, должно быть ясно, что цикл for является конструкцией во всех языках, а не функцией, поэтому он никогда не должен возвращать значение (например, целое число, логическое значение или что-то еще), а только обрабатывать поток кода через процессор. Анонимные функции предоставляют нам возможность инкапсулировать простые управляющие коды во встроенную функцию.

1 голос
/ 08 июня 2011

Нет, так как они оба утверждения. Вам нужно выражение в условии if. Кроме того, оператор return возвращает функцию, в которой он был использован.

Зачем ты это делаешь?

1 голос
/ 08 июня 2011

В большинстве языков номер

for является оператором , а не оператором .В отличие от операторов, операторы не дают результата и не могут быть вложены в выражения.Условие оператора if предполагает выражение, которое может быть оценено как логическое значение, а не оператор.

В таких языках, как Perl и Python, вы можете захотеть взглянуть на оператор map.

0 голосов
/ 08 июня 2011

Это не хороший стиль. Разделите это. Если вы пытаетесь использовать однострочники, то Java - не тот язык, мой друг.

...