Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 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
    Сообщений
    331
    Репутация:
    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
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Проще будет сделать один глобальный массив с названиями всех организаций. Делать 18 вариантов с помощью тернарного оператора - не иначе, как извращение.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

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

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

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

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

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

    Широко известно, что идеи стоят 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)

Ваши права

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