Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 1 по 7 из 7
  1. #1
    Аватар для Camelot
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Адрес
    Ярославль
    Сообщений
    57
    Репутация:
    4 ±

    Тернарный оператор

    Недавно узнал об тернарном операторе, так решил сразу за него взяться.
    Всё продвигалось неплохо, пока не столкнулся с такой проблемой.
    Сейчас у меня все названия фракций проходят через switch, а мне хочется чтобы они проходили через тернарный оператор.
    Так вот незадача, строка оператора будет уж настолько длинная...
    Может существует способ разбить строку на 2-3 части? Или же какой-нибудь еще...
    В общем, жду помощи... Заранее, спасибо.

     switch
    switch(IsAFractions(targetid))
    {
    case 0: ttext = "Гражданин";
    case 1: ttext = "LSPolice";
    case 2: ttext = "FBI";
    case 3: ttext = "Nathional Guard";
    case 5: ttext = "La Cosa Nostra";
    case 6: ttext = "Yakuza";
    case 7: ttext = "Мэрия";
    case 8: ttext = "Hitmans";
    case 9: ttext = "LSNews";
    case 11: ttext = "Licensors";
    case 12: ttext = "Russian Mafia";
    case 13: ttext = "Grove Street Families";
    case 14: ttext = "The Ballas Gang";
    case 15: ttext = "Los Santos Vagos Gang";
    case 16: ttext = "Varrio Los Aztecas";
    case 17: ttext = "The Rifa Gang";
    }


    PHP код:
    ttext = (IsAFractions(targetid) == 1) ? ("LSPolice") : (IsAFractions(targetid) == 2) ? ("FBI") : (IsAFractions(targetid) == 3) ? ("Nathional Guard"и т.д

  2. #2
    Аватар для underwoker
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Сообщений
    333
    Репутация:
    47 ±
    Цитата Сообщение от Camelot Посмотреть сообщение
    Недавно узнал об тернарном операторе, так решил сразу за него взяться.
    Всё продвигалось неплохо, пока не столкнулся с такой проблемой.
    Сейчас у меня все названия фракций проходят через switch, а мне хочется чтобы они проходили через тернарный оператор.
    Так вот незадача, строка оператора будет уж настолько длинная...
    Может существует способ разбить строку на 2-3 части? Или же какой-нибудь еще...
    В общем, жду помощи... Заранее, спасибо.

     switch
    switch(IsAFractions(targetid))
    {
    case 0: ttext = "Гражданин";
    case 1: ttext = "LSPolice";
    case 2: ttext = "FBI";
    case 3: ttext = "Nathional Guard";
    case 5: ttext = "La Cosa Nostra";
    case 6: ttext = "Yakuza";
    case 7: ttext = "Мэрия";
    case 8: ttext = "Hitmans";
    case 9: ttext = "LSNews";
    case 11: ttext = "Licensors";
    case 12: ttext = "Russian Mafia";
    case 13: ttext = "Grove Street Families";
    case 14: ttext = "The Ballas Gang";
    case 15: ttext = "Los Santos Vagos Gang";
    case 16: ttext = "Varrio Los Aztecas";
    case 17: ttext = "The Rifa Gang";
    }


    PHP код:
    ttext = (IsAFractions(targetid) == 1) ? ("LSPolice") : (IsAFractions(targetid) == 2) ? ("FBI") : (IsAFractions(targetid) == 3) ? ("Nathional Guard"и т.д
    Собсна, зачем усложнять себе жизнь? Ведь и свитчем это все прекрасно работает. 2-3 ms вам оптимизации не дадут.
    "Власть, кровь, няш-мяш, кровь, власть, Крым наш!" - (c) Наталья Поклонская.

    Критик должен быть готов и способен в любой момент и по первому требованию занять место критикуемого им и выполнять его дело продуктивно и компетентно. В противном случае критика превращается в наглую, самодовлеющую силу и становится тормозом на пути прогресса. (с) AXE

  3. #3
    Аватар для Camelot
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Адрес
    Ярославль
    Сообщений
    57
    Репутация:
    4 ±
    У меня в моде много подобных случаев. И если это всё перевести в тернарый оператор, то небольшой + к оптимизации, думаю, будет...

  4. #4
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,664
    Репутация:
    2145 ±
    Проще будет сделать один глобальный массив с названиями всех организаций. Делать 18 вариантов с помощью тернарного оператора - не иначе, как извращение.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  5. #5
    Аватар для OKStyle
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    12.05.2013
    Сообщений
    205
    Репутация:
    49 ±
    Кто сказал, что тернарный оператор в этом случае даст оптимизацию? Я бы сделал, как предложил Daniel_Cortez.

  6. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Ох уж эти доморощенные оптимизаторы, которые гоняться за скоростью там, где совершенно не нужно.

    Вы знаете какое различие в скорости обработки машиной тернарных условий и логических? Десятые, а то и сотые доли микросекунд. Много от такого "прироста" толку будет в коде, который будет вызываться раз в несколько минут? При этом вам этот код ещё читать через неделю-месяц-год. И потратите вы на его разбор явно больше, чем на разбор обычных логических условий. И ошибок в написании наделаете гораздо больше (тех самых, что уже делаете).
    Действительно ли те доли микросекунд, которые просто затеряются в интервалах вызова кода, стоит того времени, которое вы будете тратить на чтение и исправление ошибок? Сейчас вы занимаетесь чистейшим извращением и пессимизацией. Подобное уместно будет только в случае, когда код вызывается очень часто и постоянно. Например, в OnPlayerUpdate или же каком-нибудь секундном таймере с БОЛЬШИМИ и СЛОЖНЫМИ вычислениями. А какой толк от того, что какая-нибудь команда, которую игроки вызывают раз в 10 минут, будет срабатывать на 0.002 микросекунды быстрее?
    В общем, прирост к скорости настолько мал, что тут решается больше вопрос скорости программиста: прочитать, понять, исправить или доработать код, - чем производительности процесса.

    И да, вы совсем не поняли предназначения тернарного оператора. Он создан для упрощения простых условий, а-ля
    PHP код:
    if(Optimization == 1Optimize true;
    else 
    Optimize false
    и
    PHP код:
    Optimize = (Optimization true false); 
    Тут действительно и читаемость не теряется, и код выглядит более красиво. В вашем же случае это полное извращение над теми, кто будет работать с вашим кодом в дальнейшем (в том числе и над собой вы издеваетесь). Не занимайтесь ерундой.
    Последний раз редактировалось DeimoS; 03.10.2016 в 19:56.
    Связаться со мной можно в личных сообщениях этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  7. 3 пользователя(ей) сказали cпасибо:
    Daniel_Cortez (10.06.2014)Escoban (03.10.2016)underwoker (10.06.2014)
  8. #7
    Аватар для Camelot
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Адрес
    Ярославль
    Сообщений
    57
    Репутация:
    4 ±
    Всем спасибо. Буду придерживаться ваших советов.
    Тему можно закрывать.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

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