Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Не могу понять как принимается решение на основании нескольких условий (http://www.flasher.ru/forum/showthread.php?t=131586)

Furinax 23.10.2009 23:44

Не могу понять как принимается решение на основании нескольких условий
 
Знаю, что совсем глупый вопросы, но как не пытался менять выражения местами, втоое условие все равно не вызывается. Вот код:
Код AS3:

if (one == false && name.length == 0 || name.length < 4) {
        one = true;
        trace ("#1");
} else if (one == true && name.length == 0 || name.length < 4) {
        trace ("#2");
};

Перепробовал много раскладов и все равно первое условие выполняется всегда, а второе никогда. Помогите пожалуйсто разобраться. Хотя по идее, после того, когда первое условие выполнилось один раз, потом всегда должно выполняться второе. Но этого не происходит.

Lecosson 24.10.2009 00:09

Попробуй для начала четко обозначить порядок проверок, например:
Код AS3:

if (  ( (one == false) && (name.length == 0) )  || (name.length < 4)  ) {

После этого, если не заработает, поясни какое условие в какой строке является "вторым", разрулим.

SamFR 24.10.2009 02:38

Furinax, вам желательно для начала понять, что представляет из себя приоритет операторов. И, да, ставить скобки в случае необходимости.
И ещё маленький совет: сравнение типа b == true бессмысленно, ибо возвращает в точности значение b. Поэтому вместо b == ture лучше писать просто b, а вместо b == false писать !b. Где ! – оператор логического отрицания, переводит true в false и наоборот.

Furinax 24.10.2009 13:51

Спасибо большое за то, что напомнили про приоритеты операторов и остальные советы. Дело было реально в точ, что отсутствовали скобки. Кароч просто переписал так:
Код AS3:

if (one == false && (name.length == 0 || name.length < 4)) {
        one = true;
        trace ("#1");
} else if (one == true && (name.length == 0 || name.length < 4)) {
        trace ("#2");
};

А потом подумал, а все равно же условие name.length == 0 || name.length < 4 так и так должно выполняться и переписал вот так:
Код AS3:

if (one == false && (name.length == 0 || name.length < 4)) {
        if (one == false) {
        one = true;
        trace ("#1");} else if (one == false) {
        trace ("#2");};
        };

Теперь все работает как надо.

Zebestov 24.10.2009 14:29

Твой второй код как раз не эквивалентен первому. Надо убрать в первом сравнении one == false. И в блоке else ты наверное хотел написать one == true
А если еще, как советовал SamFR, убрать бессмысленные == true и == false, то получится такая схема:
Код AS3:

if (name.length == 0 || name.length < 4) {
        if (!one) {
                one = true;
                trace ("#1");
        } else {
                trace ("#2");
        }
}


udaaff 24.10.2009 14:41

И в первом условии достаточно проверить на то, что длинна меньше 4:
Код AS3:

if (name.length < 4) {
        if (!one) {
                one = true;
                trace ("#1");
        } else {
                trace ("#2");
        }
}


Zebestov 24.10.2009 14:54

хха! ) точно

Furinax 24.10.2009 15:22

Большое спасибо за советы, для меня они действительно ценные: теперь мой код не будет смотреться так ламерски :yahoo:


Часовой пояс GMT +4, время: 08:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.