Форум 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=215667)

Appleman 01.11.2018 17:15

да, нет, по фигу
 
Друзья, помогите советом.

У меня регулярно возникает ситуация, когда для какой-то переменной, изначально задуманной и объявленной в качестве Boolean, начинает резко не хватать двух положений. Например, для действия с предметом экипировки может быть 2 варианта: надеть (true) или снять (false). Но чуть только появляется условный вариант "оставить без изменений", вся система рушится.

Практический вопрос, что вы думаете на счёт использования значения null для переменных типа Boolean? Мне пока сильно не понравилось, в первую очередь из-за того, что начинаешь путаться в краткой форме записи проверки if(value).

Пока для себя придумал вариант с объявлением таких переменных как String и присвоении им текстовых строк "true", "false" или понятный строковый null, если ничего менять не надо. Правда, такое решение выглядит тоже как-то не айс...

ZergMaster 01.11.2018 17:34

А нельзя построить модель так, чтобы просто не дергать значение, если оно без изменений?

Либо можно подставлять имеющееся значение экипировки, то есть при
Код AS3:

public function set equipmentEnabled(value: Boolean): void {
                        if (value === this._equipmentEnabled) return;
 
                        this._equipmentEnabled = value;
                }
 
public function get equipmentEnabled(): Boolean { return this._equipmentEnabled; }

если без изменений, делать

Код AS3:

item.equipmentEnabled = item.equipmentEnabled;

Если такой вариант не подходит, в любом случае лучше пользоваться не строками, а идентификаторами от нуля до двух. 0=false, 1=true, 2=return

Код AS3:

public function set equipmentEnabled(value: int): void {
                        if (value === 2) return;
 
                        this._equipmentEnabled = !!value;
                }


Appleman 01.11.2018 17:55

Цитата:

Сообщение от ZergMaster (Сообщение 1206074)
А нельзя построить модель так, чтобы просто не дергать значение, если оно без изменений?

Всё можно. Но я спрашивал о частной ситуации и вариантах её разрешения.

Цитата:

Если такой вариант не подходит, в любом случае лучше пользоваться не строками, а идентификаторами от нуля до двух. 0=false, 1=true, 2=return
Я так понимаю, из соображений экономии ресурсов? И я так понимаю, что идея использовать значение null для переменных типа Boolean тебе тоже не по душе?

RedHead90 01.11.2018 18:11

Цитата:

Объект Boolean — это тип данных, который используется для логических операций и может иметь одно из двух значений(true или false).
Если задашь переменной типа Boolean значение null, оно преобразуется в значение false.
Ты можешь объявить тип переменной Object и тогда сможешь использовать для неё как true, false, так и null, но о безопасности типа тогда говорить не приходиться.

А вообще попахивает каким-то бредом. Зачем вообще что-то делать, если ничего делать не надо?

Appleman 01.11.2018 18:40

RedHead90, всё, понял-отстал. Спасибо. Это ты верно напомнил определение типа Boolean.

Вопрос снят, я фигню сморозил.

СлаваRa 01.11.2018 19:27

1. Название тему не отражает сути вопроса!
2. Смотрите, что такое битовые маски.

Tails 01.11.2018 20:32

3. Либо Enum. В as3 его нет, реализуется просто через Int с классом статических констан (Status.UNKNOWN, Status.ENABLED, Status.DISABLED)

Цитата:

Пока для себя придумал вариант с объявлением таких переменных как String и присвоении им текстовых строк "true", "false" или понятный строковый null, если ничего менять не надо. Правда, такое решение выглядит тоже как-то не айс...
Ты его почти изобрёл, enum. )) Только, он должен быть на основе int/uint (операций с целочисленным самые быстрые) и оформлен чуть удобнее.

ZergMaster 02.11.2018 01:47

Цитата:

Сообщение от Appleman (Сообщение 1206075)
Я так понимаю, из соображений экономии ресурсов?

ага. Все ж я бы пересмотрел подход, чтобы не было необходимости что-то делать, когда делать чего-то не надо

Appleman 02.11.2018 10:00

ZergMaster, в первом сообщении я привёл не конкретный пример, а наиболее наглядный для краткой иллюстрации сути вопроса. Не парься.

Если интересно, подобная ситуация на практике у меня возникла, когда потребовалось применять не одиночное значение да/нет, а профиль из нескольких, который имеет свой персональный ID и объединяет их в некую осмысленную комбинацию. Вот тут и всплывает проблема того, что раньше при отсутствии изменений можно было действительно просто ничего не делать, а теперь стало нельзя!

Psycho Tiger 02.11.2018 12:20

Цитата:

2. Смотрите, что такое битовые маски.
Они хороши для описаний кучи пермутаций кучи булевых (хотя щас бы в 2018 на флеше байтики экономить).
Описать одно из трёх значений оно не сильно поможет :)


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

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