Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
> if, &&, || - оптимизация, как быстрее проверки идут?
AliceDiren
сообщение Oct 18 2005, 14:17
Сообщение #1


Level 7
**

Класс: Маг
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [Sn]



LEX: Все началось с этого:

Neverwinter Script Source
int StartingConditional()
{
object oPC = GetPCSpeaker();

if (GetLocalString(oPC, "victorspoken") == "1") return FALSE;

if (GetGender(oPC) != GENDER_FEMALE) return FALSE;

if (GetRacialType(oPC) != RACIAL_TYPE_DWARF) return FALSE;

if (GetRacialType(oPC) != RACIAL_TYPE_GNOME) return FALSE;

if (GetRacialType(oPC) != RACIAL_TYPE_HALFLING) return FALSE;

return TRUE;
}

--------------------------
Быть может так проще?
Neverwinter Script Source
int StartingConditional()
{
object oPC = GetPCSpeaker();
int bResult = FALSE;

if(GetLocalString(oPC, "victorspoken")=="1")
return FALSE;

bResult = (GetRacialType(oPC) = RACIAL_TYPE_DWARF || GetRacialType(oPC) == RACIAL_TYPE_GNOME || GetRacialType(oPC) == RACIAL_TYPE_HALFLING) && (GetGender(oPC) == GENDER_FEMALE);

return bResult;
}


Я просто к тому, что несколько строк, проверяющих условия рассовой принадлежности, стоит объеденить в одну. Гораздо легче читать

Сообщение отредактировал Lex - Oct 18 2005, 15:58
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
 
Открыть новую тему
Ответов
Friedrich
сообщение Oct 22 2005, 20:27
Сообщение #2


Level 5
**

Класс: Рейнджер
Характер: Neutral Good
Раса: Человек



QUOTE (dumbo @ Oct 18 2005, 16:27)
несколько проверок одного условия.

void main()
{
  int i;
  if (i == 0x123) return;
  if (i == 0x321) return;
  if (i == 0x111) return;
  if (i == 0x222) return;
  i = 0x666;
}

Пожалуй, так будет эффективнее всего: ;)
Neverwinter Script Source
void main()
{
  int i = 0x333;
  switch( i )
  {
    case 0x111:
    case 0x222:
    case 0x333:
    case 0x444: return;
  }
  i = 0x666;

}

Или нет? Я в этом не особо шарю, но код по крайней мере короче чем в примерах выше. (Значит лучше?)
CODE
00000008 42 000000AB              T 000000AB
0000000D 1E 00 00000008           JSR fn_00000015
00000013 20 00                    RETN
00000015 02 03                    RSADDI
00000017 03 01 FFFFFFFC 0004      CPTOPSP FFFFFFFC, 0004
0000001F 03 01 FFFFFFFC 0004      CPTOPSP FFFFFFFC, 0004
00000027 04 03 00000111           CONSTI 00000111
0000002D 0B 20                    EQUALII
0000002F 25 00 0000004E           JNZ off_0000007D
00000035 03 01 FFFFFFFC 0004      CPTOPSP FFFFFFFC, 0004
0000003D 04 03 00000222           CONSTI 00000222
00000043 0B 20                    EQUALII
00000045 25 00 00000038           JNZ off_0000007D
0000004B 03 01 FFFFFFFC 0004      CPTOPSP FFFFFFFC, 0004
00000053 04 03 00000333           CONSTI 00000333
00000059 0B 20                    EQUALII
0000005B 25 00 00000022           JNZ off_0000007D
00000061 03 01 FFFFFFFC 0004      CPTOPSP FFFFFFFC, 0004
00000069 04 03 00000444           CONSTI 00000444
0000006F 0B 20                    EQUALII
00000071 25 00 0000000C           JNZ off_0000007D
00000077 1D 00 00000012           JMP off_00000089
0000007D 1B 00 FFFFFFF8           MOVSP FFFFFFF8
00000083 1D 00 00000026           JMP off_000000A9
00000089 1B 00 FFFFFFFC           MOVSP FFFFFFFC
0000008F 04 03 00000666           CONSTI 00000666
00000095 01 01 FFFFFFF8 0004      CPDOWNSP FFFFFFF8, 0004
0000009D 1B 00 FFFFFFFC           MOVSP FFFFFFFC
000000A3 1B 00 FFFFFFFC           MOVSP FFFFFFFC
000000A9 20 00                    RETN


И кстати, если условие - функция, то она вызывается только один раз и переменную заводжить не нужно.

Где-то читал, что где там, где это возможно, лучше юзать switch/case, чем много if-ов.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

Сообщений в этой теме
- AliceDiren   if, &&, || - оптимизация   Oct 18 2005, 14:17
- - Lex   QUOTE (AliceDiren @ Oct 18 2005, 15:17)Быть ...   Oct 18 2005, 14:23
- - AliceDiren   так а там не много-условные, и не вложенные. Я пот...   Oct 18 2005, 14:28
- - Lex   где-то читал или кто-то мне говорил, что операция ...   Oct 18 2005, 14:36
- - Aiwan   Lex давай обсудим этот вопрос со всеми в отдельно...   Oct 18 2005, 15:29
- - dumbo   вскроем правду: имеем два скрипта: 1. несколько ...   Oct 18 2005, 16:27
- - _kaa_   В итоге 1. Если в условии используется функция, о...   Oct 18 2005, 18:54
- - Aiwan   Класс. Давно меня это мучало. Но слишком поздно и ...   Oct 18 2005, 22:32
- - 2_advanced   нужно делать экспорт функций и использовать с++ (...   Oct 18 2005, 22:46
- - Nashman   Если уж речь у вас зашла о языках програмирования,...   Oct 18 2005, 23:27
- - Lex   QUOTE (2_advanced @ Oct 18 2005, 23:46)нужно...   Oct 18 2005, 23:43
- - Friedrich   QUOTE (dumbo @ Oct 18 2005, 16:27)несколько ...   Oct 22 2005, 20:27
- - Misty Dragon   Как раз-таки кэйсы намного тяжелее обрабатываются,...   Oct 25 2005, 19:08
- - dumbo   Misty Dragon, ничего не понял из твоего поста... ...   Oct 26 2005, 12:04


Ответить в эту темуОткрыть новую тему
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 30th April 2025 - 09:21