Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
IF это условный оператор. Определение: "конструкция языка программирования, обеспечивающая выполнение определённой команды (набора команд) только при условии истинности некоторого логического выражения." Что же он делает?! "Условный оператор позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие." По простому Разветвляет программу на два направления Рассмотрим пример: Создаем новый проект, кидаем на СТРАНИЦУ(рабочий стол программы) два объекта TextEntry. Первому объекту назначаем переменную [ima], для второго-[vozrast]. И кидаем на форму кнопку.
Этот пример будет проверять на ввод имени и возраста пользователя, и выполнения дальнейшего от результата ввода выполнение программы. Теперь открываем вкладку "Команды" в объекте PushButton (Кнопка) и пишем первое условие перед этим хочу процитировать из хелпа очень важные строки: Справочник Команд -> Управление -> If Условия ----------------------------------------- Синтаксис: If "[параметр1]" "[оператор]" "[параметр2]" где: [параметр1] Первый элемент, участвующий в операции сравнения. Может содержать текст, числа, математическое выражение, переменные, и т.д. [оператор] Оператор сравнения может быть одним из ниже перечисленных: = Первый элемент, участвующий в сравнении, равен второму. < Первый элемент, участвующий в сравнении, меньше второго. > Первый элемент, участвующий в сравнении, больше второго. <> Первый элемент, участвующий в сравнении, не равен второму. <= Первый элемент, участвующий в сравнении, меньше или равен второму. >= Первый элемент, участвующий в сравнении, больше или равен второму. [параметр2] Второй элемент, участвующий в операции сравнения. Может содержать текст, числа, математические выражения, переменные и т.д. ----------------------------------------- Первое что нам надо узнать, ввел ли пользователь свое имя, т.е. надо проверить переменную на пустоту Создаем простое условие(почему простое узнаете позже):
Code
.Проверяем переменную [ima] на пустоту If "[ima]" "=" "" .Если переменная [ima] пустая, то выводим сообщение о необходимости ввести имя AlertBox "[PubTitle]" "Введите ваше имя" Else .если перемененная содержит имя, то выводим приветствие AlertBox "[PubTitle]" "Здравствуйте [ima]!" EndIf
Ну вот имя мы узнали, теперь тоже самое проделаем с возрастом
Code
.Проверяем переменную [vozrast] на пустоту If "[vozrast]" "=" "" .Если переменная [vozrast] пустая, то выводим сообщение о необходимости ввести возраст AlertBox "[PubTitle]" "Введите ваш возраст" Else .если перемененная содержит возраст, то выводим сообщение AlertBox "[PubTitle]" "Здравствуйте [ima]!| ваш возраст [vozrast]лет" EndIf
И так мы тестируем проект: Запускаем и сразу нажимаем кнопку "ОК", Нам программа ответит сообщением "Введите ваше имя" потом появится и второе "Введите ваш возраст"
Нда, согласитесь, не очень удобно Теперь давайте заполним все поля и нажмем кнопку "ОК" Программа выведет сообщение "Здравствуйте Вася!"
после закрытия приветствия, выскакивает второе... хмм, что же делать?!.. Вот тут на помощь приходит команда для сложных сравнений IfEx из хелпа: Справочник Команд -> Управление -> IfEx Условия ----------------------------------------- Синтаксис: IfEx "[выражение]" где: [выражение] Исследуемое выражение. В общем случае выражение состоит из двух сравниваемых элементов, разделенных оператором сравнения. Например: "[операторы]" Сравниваемые элементы могут содержать текст, числа, математические выражения, переменные и т.д. Оператор сравнения может быть одним из ниже перечисленных: = Первый элемент, участвующий в сравнении, равен второму. < Первый элемент, участвующий в сравнении, меньше второго. > Первый элемент, участвующий в сравнении, больше второго. <> Первый элемент, участвующий в сравнении, не равен второму. <= Первый элемент, участвующий в сравнении, меньше или равен второму. >= Первый элемент, участвующий в сравнении, больше или равен второму. ----------------------------------------- Очень удобная команда, в ней можно сделать несколько проверок, вот ей мы и воспользуемся, добавлю еще один момент. Если в условии есть несколько вырожений то они разделяются логическими операторами "AND" и "OR" (И и ИЛИ) итак изменим наш код
Code
.проверяем обе переменные на пустоту IfEx "[ima]=[#34][#34] OR [vozrast]=[#34][#34]" .если хоть одна переменная пустая выводим сообщение AlertBox "[PubTitle]" "Заполните поля" Else .если все поля заполнены выводим приветствие AlertBox "[PubTitle]" "Здравствуйте [ima]!| ваш возраст [vozrast]лет" EndIf
тестируем проект... Ну теперь все нормально, выводится одно сообщение, если поле не заполнено. И одно сообщение если поля заполнены. Если развивать проект дальше, то с помощью IfEx можно сделать например проверку на возрастную категорию и отправку пользователя на соответствующую страницу. Разобьем пользователей на три возрастных категорий A) до 18 лет, B) 18-30 лет, C) от 30 лет Подправим предыдущий код:
Code
.проверяем обе переменные на пустоту IfEx "[ima]=[#34][#34] OR [vozrast]=[#34][#34]" .если хоть одна переменная пустая выводим сообщение AlertBox "[PubTitle]" "Заполните поля" Else .если все поля заполнены определяем возрастную категорию IfEx "[vozrast]<18" .Категория A AlertBox "[PubTitle]" "Здравствуйте [ima]!| ваш возраст [vozrast]лет|Категория [b]A[/b]" GotoPage "kategoria_A" EndIf IfEx "[vozrast]>18 AND [vozrast]<31" .Категория B AlertBox "[PubTitle]" "Здравствуйте [ima]!| ваш возраст [vozrast]лет|Категория [b]B[/b]" GotoPage "kategoria_B" EndIf IfEx "[vozrast]>30" .Категория C AlertBox "[PubTitle]" "Здравствуйте [ima]!| ваш возраст [vozrast]лет|Категория [b]C[/b]" GotoPage "kategoria_C" EndIf EndIf
обратите внимание в примере одно условие лежит внутри другого таким образом строятся программы по заданному кодером сценарию. Ветвей у программ может быть множество, и развитие программы будет идти строго от результата сравнения заданным кодером. На этом все, но урок будет дополнятся и исправляться, ищем ошибки и неточности, мы будем исправлять или дополнять Следующий урок будет Циклы
Определение: "конструкция языка программирования, обеспечивающая выполнение определённой команды (набора команд) только при условии истинности некоторого логического выражения."
Всю жизнь меня эти определения напрягали. Еще более непонятно становится. То ли
Quote (Сергей)
Условный оператор позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие.
vuger, посмотрите еще статью "Как читать и писать код" у меня в подписи. Делал специально для тех, кто начинает изучение NeoBook.
Обязательно!
Мне немного проще, в плане того, что с английским не плохо, многое я понимаю и читая хелп необука, но вот толку от этого понимания 0, когда не знаешь азов!
Все понятно..:) Все здорово..:) вот только не могу понять.. что ж лично меня так раздражает этот.. AlertBox.. Ну совсем какой-то навязчиво-не эстетичный../ как "гав"/.. объект..:) лично моему визуальному восприятию - он мешает..:) сорри..
меня так раздражает этот.. AlertBox.. Ну совсем какой-то навязчиво-не эстетичный.
Гражданка bodunova, "чувство прекрасного" у всех людей разное, и, например, меня необушный AlertBox не раздражает вовсе, а рздражают (просто доводят до тошноты) другие вещи, например, интерфейс Win7. Необушный же AlertBox стандартный, виндовский. Когда освоите NB получше, то научитесь создавать свои AlertBox-ы (это несложно), и раздражение уйдет. В данном же случае, это всего-лишь пример-пояснение, и не следует так сильно переживать по этому поводу.
Кстати, Сергей, более не объявится на этом ресурсе, и не сможет вам ответить.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
По теме. Не могу не поделится своими соображениями, и может быть кто то опровергнет мои выводы.
Практически везде встречаю примерно такой код
Код
If "[Vars]" "<>" "" If "[File]" "<>" "" Могут следовать еще какие нибудь если, а после выполняется код. EndIf EndIf
Ладно если код в пару строк, а если 50-100? Ведь НБ ж обрабатывает эти строки и в том случае если услови верно.
Не лучше ли определится в последовательности выполнения и писать примерно так.
Код
If "[Vars]" "=" "" Return EndIf If "[File]" "=" "" Return EndIf А после выполняется код.
Если какая то переменная окажется пустой, то НБ дальше читать код не будет.
Если же дальше может присутствовать какой либо код который нужно выполнить независимо от значений заданных переменных, то можно воспользоваться командой GotoLine.
Код
If "[Vars]" "=" "" GotoLine"Строка или метка с которой нужно продолжить чтение кода" EndIf If "[File]" "=" "" GotoLine"Строка или метка с которой нужно продолжить чтение кода" EndIf Код Код Код ..... :Строка или метка А после выполняется код.
Ведь НБ ж обрабатывает эти строки и в том случае если услови верно.
Цитата (mishem)
Не лучше ли
В обоих случаях (если условие выполняется) NB обрабатывать будет все последующие строки до тех пор, пока условие будет выполнятьмя, и остановит скрипт в случае несоблюдения условия. Во втором же варианте интерпретатору потребуется обработать строк даже больше, чем в первом (за счет повторяющейся строки Return).
Единственное преимущество, которое дает второй вариант это - возможность не запутаться во вложенных IF..ENDIF.
Вообще, написание оптимального кода дело достаточно непростое, но есть определенные правила, одно из которых гласит, что в коде должно быть как можно меньше "паразитных" строк (операций), коей и является, в данном случае, Return. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
В втором же варианте интерпретатору потребуется обработать строк даже больше, чем в первом (за счет строки Return).
А так?
Код
IfEx "[Vars]=[#34][#34] or [File]=[#34][#34]" Return Else
EndIf
Return не дает бессмысленной прогонке кода если условие верно. Если же оно не верно, тогда код выполняется. По факту придется обработать только одну лишнюю строку, вместо не одного десятка.
Цитата (Peter)
"паразитных" строк (операций), коей и является, в данном случае, Return.
Почему она паразитная? Разве редко бывает что решил открыть файл и передумал? Ретурн не даст дальше прогнать код если переменная пустая. А так, пустая она, или не пустая код все равно прогоняется. Не хочешь читать хелп?
Во-вторых, в первый раз код шел последовательно от проверки одного условия до провеки следующего, т.е. каждое последующее IF..END зависело от предыдущего, в новом же варианте условие выполняется при совпадении (НЕ совпадении) любой переменной.
Цитата (mishem)
Почему она паразитная?
"Паразитная" именно в указанном варианте, а не вообще.
mishem, оптимальность кода вещь, если так можно сказать, творческая, и каждый сам должен научиться понимать как будет оптимальней в каждом конкретном случае. Здесь должна срабатывать "линейная логика" (способность последовательно мыслить), и не овладев ею, с программированием лучше распрощаться.
Добавлено (23 Февраля 2013, 16:20) ---------------------------------------------
Что хочеться ещё заметить... Для начала: во втором случае логика не хромает, а она просто иная. И по-поводу Return... В NB эта строчка означает прерывание текущего скрипта, и возврат управления в предыдущий скрипт (если оный имеется), например, если какая-то подпрограмма, содержащая строку Return, вызывается из скрипта кнопки. В Delphi существует аналог - Exit. Гуляя по разным делфийским форумам, я не раз встречал рассуждения о том, что применение Exit якобы является дурным тоном, и правильно написанный код не должен содержать Exit. В умных книжках тоже имеется замечание на тему, что следует (по возможности) избегать Exit, но это не есть догма, и применение Exit вполне допустимо, и даже оправдано, например, в случаях сложного ветвления кода, когда без Exit никак. Это так, филосовская информация к размышлению...
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Все с вами ясно. Как всегда, каждый останется при своем мнении. По сути
Цитата (mishem)
может быть кто то опровергнет мои выводы
у тебя это пока не получилось.
Цитата (Peter)
я не раз встречал рассуждения о том, что применение Exit якобы является дурным тоном,
Если все будут говорить сахар, у меня во рту слаще не станет. Я вижу своими глазами в отладчике что делает программа при выполнении, или не выполнении условия. И от того что кто то мне будет говорить что это дурной тон не дать программе прочитать все что написано даже если это не надо, мягко говоря ничего не изменится. Я поделился своими мыслями. Как писать код, дело каждого. По этому
Цитата
Как всегда, каждый останется при своем мнении.
Добавлено (24 Февраля 2013, 13:38) --------------------------------------------- И еще, хочу добавить подумав.
Я в запое по этому мысли быстро не приходят.
По скорости выполнения кода в программе мы может быть особо и не потеряем во времени. Может быть несколько нона секунд. Но при "разборке полета" в отлачике мы сэкономим времени в несколько минут. Суть мысли не всегда можно рассматривать в одном направлении.
Цитата (Peter)
я не раз встречал рассуждения о том, что применение Exit якобы является дурным тоном
Я помню когда попы называли телевизор "бесовским ящиком", а сейчас от туда не вылазят. Все мы учимся на чьих то словах, выводах... И со временем это входит в привычку. После мы даже не задумываемся над тем, почему именно так и ни как по другому. Ну по поводу стада ты в курсе. Может быть и я приду когда то к такому мнению что не надо вставлять эту команду, но пока.... Не хочешь читать хелп?
Что значит "правильнее"? У тебя оба скрипта работают так, как они и должны работать согласно их записи. Если тебе нужно прервать какой-то скрипт, то для этого и существует Return, все логично.
Честное слово, я так и не могу понять чего ты хочешь доказать? - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
mishem, неужели ты не видишь, что логика в обоих скриптах разная!!!
Если ты запишешь второй скрипт вот так: If "[i]" "=" "" Return Else .Это просто текст из 100 строк .Это просто текст из 100 строк ....... .Это просто текст из 100 строк EndIf
то он станет работать как первый с тем же результатом, т.е. после Return скрипт выполняться не будет. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Так об этом же и речь. Я именно это объясняю. Зачем ему выполняться если его не надо выполнять? Но, первый вариант с Return прекращает давать команду интерпритатору (или как там правильно) читать дальше не нужные строки. А во втором случае он их читает. Тем самым загружая проц. (ну это я так думаю)
Если после условия нужно еще что то выполнить, тогда мы Return заменяем на GotoLine. Тем самым мы даем понять что не нужно читать не нужные строки. Все это может быть и мелочи, но собрав секунды мы получаем минуты. Это я так, образно. Не хочешь читать хелп?
Все это может быть и мелочи, но собрав секунды мы получаем минуты. Это я так, образно.
Скорее, ты сэкономишь миллисекунды. На самом деле - это всё мелочи. Есть действительно сложнейшие программы и алгоритмы, где нужна оптимизация. А это так - мелочи всё... Одно дело, скажем, взять какой фильтр фотошопа, который над фото делает сложные вычисления и преобразования. Вот там нужно оптимизировать всё до максимума и процесс этот фактически бесконечный А ты сэкономишь пару миллисекунд, которые никто не заметит на деле, а потратишь на них уйму времени работы. Оно того не стоит. Поэтому, я бы над таким вопросом и не парился даже.
Да, по факту именно так. Но я пришел к такому выводу когда в отладчике начинаешь анализировать код пошагово. Не надо щелкать"дальше" на том коде который не работает. Не хочешь читать хелп?
А ты сэкономишь пару миллисекунд, которые никто не заметит на деле,
Это верно, но только если не в цикле.
Цитата (mishem)
Не надо щелкать"дальше" на том коде который не работает
Т.е. напишу такой код чтобы в отладчике меньше щелкать? Очень странный подход.
mishem, вот тебе два скрипта:
Первый:
Код
If "[Test1]" "=" "" Return EndIf If "[Test2]" "=" "" Return EndIf If "[Test3]" "=" "" Return EndIf If "[Test4]" "=" "" Return EndIf .Что-то
и второй:
Код
If "[Test1]" "<>" "" If "[Test2]" "<>" "" If "[Test3]" "<>" "" If "[Test4]" "<>" "" .Что-то EndIf EndIf EndIf EndIf
И теперь подсчитай количество строк, которое формально должен "окучить" интерпретатор, чтобы выполнить скрипт до конца в первом и во втором случае.
А вообще, как и говорил уже:
Цитата (Peter)
оптимальность кода вещь, если так можно сказать, творческая, и каждый сам должен научиться понимать как будет оптимальней в каждом конкретном случае.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
В том-то и дело, что хочу понять, да как-то не получается...
mishem, программирование это штука такая где главное, чтобы безглючно и эффективно работало твое "произведение", а что там у него внутри (оптимально/неоптимально) значения не имеет.
Кстати, возможно ещё и поэтому авторы (бесплатных прог) не светят исходники. Стесняются.
mishem, ты вот все спрашиваешь типа "как правильно?", но я, что эксперт, что ли? А я тебя все время подталкиваю к мысли "сам решай, как правильно". Не первый год "необушничаешь" поди.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Я все больше в теории, на практике то ничего не делаю. Мне НБ нужна была сделать одну программу. Сделал две. И фсе. Сейчас вот третью делаю. Мож сделаю все таки. А это так, мыслями поделился, а уж кто как будет делать, решать им.
Добавлено (24 Февраля 2013, 23:00) ---------------------------------------------
Цитата (Peter)
И теперь подсчитай количество строк, которое формально должен "окучить" интерпретатор,
Условие для чего создается? По теории вероятности получается что 50 на 50. Правильно? Так что лучше, обрабатывать постоянно все строки, или только из 50%? Не хочешь читать хелп?
Я все больше в теории, на практике то ничего не делаю.
А! Значится ты - теоретик? А мне отводится роль критика?
Теория и практика неразрывно связаны, но теория должна идти впереди практики, а не наоборот.
Цитата (mishem)
а уж кто как будет делать, решать им.
А я тебе о чем талдычу?
Цитата (mishem)
По теории вероятности получается что 50 на 50. Правильно?
С чего ты так решил? Совсем необязательно. Это когда ты монетку бросаешь 50/50, а тут все зависит от того, что было раньше, и от количества условий.
Цитата (mishem)
Так что лучше, обрабатывать постоянно все строки, или только из 50%?
mishem, тут многое будет зависеть и от того, как много строк написано в скрипте, который должен выполниться в случае соблюдения всех условий, но в любом случае, вероятность того, что скрипт дойдет до конца меньше, чем он оборветься, если условий много. И в этом случае конструкция с Return может оказаться выгодней, если обрыв скрипта произойдет раньше, чем "счетчик условий" дойдет до половины, а как перевалит за половину картина начнет меняться в обратную сторону, и, если дойдет до "рабочего" скрипта, то тут....
Ну, посчитай сам....
Цитата (Peter)
оптимальность кода вещь, если так можно сказать, творческая, и каждый сам должен научиться понимать как будет оптимальней в каждом конкретном случае.
Устал я уже...
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Тут сам факт, понимаешь, такие вещи как когда проверяешь выбран файл или нет смысла нет читать дальше код если он не выбран. А по факту, дальнейшая обработка не обходится одной строкой. Не хочешь читать хелп?
А по факту, дальнейшая обработка не обходится одной строкой
Убедил!
Точнее я бы сказал - логично! Но это не значит, что теперь я стану применять в подобных случаях Return.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
mishem, Ты рассматриваешь ситуацию, только, когда файла нет. А если подразумевается, что он есть? И это некая подстраховка? Т.е. все условия всегда выполняются. Тогда конструкция с Return уже будет немного уступать. Пожалуйста, не надо ко мне на "Вы", а то чувствую себя бабулькой)
Всем привет. Суть такая, есть ряд чекбоксов. некоторые из них нужно отметить, чтобы перейти на определенную страницу, в случае неправильного ответа, сообщение что есть ошибка. Помогите с кодом. Александр Сергеевич Шурыгин