Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.11.2018, 13:14
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 11  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Цитата:
Описать одно из трёх значений оно не сильно поможет
Взял маску, проверил что в нее попадает - профит, и что-то мне подсказывает что кейс автора как раз подходящий
__________________
местонахождение

Старый 02.11.2018, 17:27
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 12  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Цитата:
Сообщение от СлаваRa Посмотреть сообщение
Смотрите, что такое битовые маски.
В принципе, да, самое оно.

Но правда данный метод не решает другую проблему, связанную не с самим кодом, а с процессом его создания. Возможно, это ламерство, но у меня в процессе отладки на каждый чих предусмотрен свой trace. Я за это и полюбил строковые идентификаторы, что при отсутствии полноценного Вью, я хотя бы в консоли хорошо читаю и понимаю, что происходит в моей Модели. И если вместо информативных строк начнут массово появляться нули и единицы, я перестану ориентироваться в происходящем.
__________________
Не сломано - не чини!

Старый 03.11.2018, 03:00
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 13  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
Appleman
Ты можешь все числовые команды представить в виде стрингов и в консоль выводить наименование команды. Но основная обработка будет происходить с числами.

Старый 03.11.2018, 06:21
RedHead90 вне форума Посмотреть профиль Отправить личное сообщение для RedHead90 Найти все сообщения от RedHead90
  № 14  
Ответить с цитированием
RedHead90

Регистрация: Apr 2018
Сообщений: 42
@Appleman, отказываться от битовых масок точно не стоит. Это простой и мощный инструмент, который много где может облегчить тебе жизнь. Для читаемого вывода, как вариант, можно заморочиться и написать утилитарный класс, который через рефлексию (describeType) будет брать имена всех флагов, проверять значение маски на наличие этих самых флагов и составлять готовую строку для вывода.

Старый 12.11.2018, 12:42
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 15  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Ну, раз такая пьянка, то я хочу встрять и нагло вставить, что хранить enumы как читаемые строки – это, возможно, оптимальное решение.
1) Сравнить `myValue === MyEnum.ENUM_OPTION_1` – это быстро. Числа сравнить в десятки раз быстрее, но одна наносекунда или 50 – скорее всего, разницы ты не почувствуешь никогда.
2) Иметь возможность вывести читабельный вид без утилитарных классов:
2.1) Банально удобней при отладке – меньше шанс ошибиться – больше времени освободится на оптимизацию частей приложения, которые реально в этом нуждаются
2.2) Исчезает оверхед на создание этого утилитарного класса и его использования – ну, серьёзно, плодить абстракцию там, где она не нужна?

и, самое важное, о чём наверняка умалчивают ребята: для поддержания твоего developer happiness оверхед на инфраструктуру будет выше, чем выхлоп. И под оверхед будет вообще всего, в т.ч. и скорости исполнения программы. Сейчас объясню: вряд ли ты будешь делать что-то вроде `myBitMask & bitsIamInterestedIn > 0` в коде каждый раз, когда это будет нужно. Ты сделаешь где-нибудь метод `heyBitMaskIsItOn(myBitMask, bitsIamInterestedIn)`, оттестируешь его и будешь вызывать его всякий раз при работе с битовыми масками. Только вот вызов метода это дороже, чем строковое сравнение (особенно, если строки короткие).

Старый 12.11.2018, 18:27
ZergMaster вне форума Посмотреть профиль Отправить личное сообщение для ZergMaster Найти все сообщения от ZergMaster
  № 16  
Ответить с цитированием
ZergMaster
 
Аватар для ZergMaster

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
Psycho Tiger
а в чем проблема сделать
Код AS3:
public static const ENUM_OPTION_1: uint = 1;
?=)
__________________
while(live()) { hope(); }

Старый 12.11.2018, 19:27
RedHead90 вне форума Посмотреть профиль Отправить личное сообщение для RedHead90 Найти все сообщения от RedHead90
  № 17  
Ответить с цитированием
RedHead90

Регистрация: Apr 2018
Сообщений: 42
@Psycho Tiger, а с комбинациями значений как быть? Заводить еще по строке на каждую такую комбинацию или принимать массив строк? Тут все таки битовые маски, имхо, поудобнее будут. Именно удобнее, ибо о наносекундах, как ты заметил, в таких проектах точно париться не стоит.

И, к слову, о наносекундах:
Цитата:
Только вот вызов метода это дороже, чем строковое сравнение (особенно, если строки короткие).
для этого есть инлайн.


Кстати, вот нашел в закромах небольшой класс, который как раз переводит битовую маску в строку, беря имена флагов из статических констант "enum" класса. Писал давно, надо допиливать, но возможно кому-то пригодится.

Код AS3:
package {
import avmplus.DescribeTypeJSON;
import avmplus.INCLUDE_TRAITS;
import avmplus.INCLUDE_VARIABLES;
 
import flash.utils.Dictionary;
 
public class BitmaskToString {
 
    private static const CACHE:Dictionary = new Dictionary();
 
 
    public static function fromClass(flagCls:Class, bitmask:int):String {
        if (CACHE[flagCls] == null) cacheFlags(flagCls);
        return fromMap(CACHE[flagCls], bitmask);
    }
 
/*
    flagMap = {
        flagName1 : 1,
        flagName2 : 2,
        flagName3 : 4,
        ...
    }
*/
 
    [Inline]
    public static function fromMap(flagMap:Object, bitmask:int):String {
        var result:String = '';
 
        for (var flagName:String in flagMap) {
            var flag:int = flagMap[flagName];
            if ((bitmask & flag) == flag) {
                result += flagName + ' | ';
            }
        }
 
        if (result != '') result = result.substr(0, result.length - 3);
 
        return result;
    }
 
    [Inline]
    private static function cacheFlags(flagCls:Class):void {
        var clsDescription:Object = DescribeTypeJSON.describeType(flagCls, INCLUDE_TRAITS | INCLUDE_VARIABLES);
 
        var constList:Array = clsDescription['traits']['variables'];
        var flagMap:Object = {};
 
        for (var i:int = 0; i < constList.length; ++i) {
            if (constList[i].type != 'int') continue;
            var flagValue:int = flagCls[constList[i].name];
            if (flagValue == 0 || (flagValue & (flagValue - 1)) != 0) continue;
            flagMap[constList[i].name] = flagValue;
        }
 
        CACHE[flagCls] = flagMap;
    }
}
}

Старый 24.11.2018, 13:33
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 18  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Цитата:
@Psycho Tiger, а с комбинациями значений как быть?
Всё же, оригинальный вопрос у ТСа был о трёх значениях, а не о трёх флагах:

Цитата:
> Например, для действия с предметом экипировки может быть 2 варианта: надеть (true) или снять (false). Но чуть только появляется условный вариант "оставить без изменений", вся система рушится.
> Пока для себя придумал вариант с объявлением таких переменных как String и присвоении им текстовых строк "true", "false" или понятный строковый null
Битовые маски здесь не подходят

Создать новую тему Ответ Часовой пояс GMT +4, время: 11:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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