Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 3 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя
Показано с 21 по 30 из 31
  1. #21
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Пельмень Посмотреть сообщение
    Это аналог if, else if, else if (function() == 1) else if (function() == 2) else if (function() == 3) - функция будет вызвана 3 раза, также и в свитче, если я не ошибаюсь, конечно же.
    Я же дал пример. Вставьте его в мод и посмотрите. А если лень - я в том же сообщении написал всё по поводу того, как всё будет работать
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    DeimoS, инициализируй переменную index вне цикла, и увидишь результат, при новой итерации присваиваешь одно и тоже значение, смысл?

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    DeimoS, инициализируй переменную index вне цикла, и увидишь результат, при новой итерации присваиваешь одно и тоже значение, смысл?
    Лол, я ожидал чего-то подобного. Только вот как вы себе представляете ваш код без цикла? Где записывать ID анимации, чтоб его потом сверять при нажатии нужных кнопок?
    Каждая итерация соответствует одному нажатию нужных нам кнопок. И чтоб всё работало как надо, нам нужно узнавать ID проигрываемой анимации при каждом из нажатий. Мой код делает именно это. А ваш?

    Ваш тест никак не отражает работу switch. Разница в скорости достигается именно тем, что вы вызываете функцию вне цикла и в цикле. И разница будет даже если вы просто будете выводить полученное значение в консоль, а не проверять его в switch. В общем, вы проверяли не то :)

    - - - Добавлено - - -

    И да, я же уже дал вам код, который может показать то, сколько раз вызывается функция. И там видно, что switch вызывает функцию ровно 1 раз. Какие ещё могут быть вопросы то? Не вводите людей в заблуждение :(
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  4. #24
    Аватар для Пельмень
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    Код:

    PHP код:
        new time GetTickCount();
        new 
    0;
        for(new 
    i!= 1000000i++)
        {
            switch (function()) {
                case 
    1..51;
            }
        }
        
    printf("Цикл 1 сработал за %d мс"GetTickCount()-time);
        
        
    time GetTickCount();
        new 
    func = function();
        for(new 
    i!= 1000000i++)
        {
            switch (
    func) {
                case 
    1..51;
            }
        }
        
    printf("Цикл 2 сработал за %d мс"GetTickCount()-time); 
    PHP код:
    stock function () {
        return 
    5;

    Результаты:

    PHP код:
    [23:32:17Цикл 1 сработал за 43 мс
    [23:32:17Цикл 2 сработал за 30 мс 
    Операционная система:

    PHP код:
    Linux inn0va 3.17.0-031700rc4-generic #201409071935 SMP Mon Sep 8 01:02:20 UTC 2014 i686 i686 i686 GNU/Linux 
    - - - Добавлено - - -

    Очевидно, что switch вызывает функцию при каждой проверке.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ещё один...
    А теперь проверьте так
    PHP код:
        new time GetTickCount(); 
        new 
    0
        for(new 
    i!= 1000000i++) 
        { 
            switch (function()) { 
                case 
    1..51
            } 
        } 
        
    printf("Цикл 1 сработал за %d мс"GetTickCount()-time); 
         
        
    time GetTickCount(); 
        new 
    func;
        for(new 
    i!= 1000000i++) 
        { 
            
    func = function(); 
            switch (
    func) {
                case 
    1..51
            } 
        } 
        
    printf("Цикл 2 сработал за %d мс"GetTickCount()-time); 
    дабы проверялся именно switch, а не факт того, что обращение к функции 1 раз, быстрее, нежели 1000000
    Последний раз редактировалось DeimoS; 09.09.2014 в 22:48.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  6. #26
    Аватар для Пельмень
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    Разумеется, такой такой вариант будет медленнее, хотя-бы потому что, каждый раз переменной будет присваиваться значение, но, опять-же, для чего присваивать значение каждый раз? По моему это бессмысленно.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Пельмень Посмотреть сообщение
    Разумеется, такой такой вариант будет медленнее, хотя-бы потому что, каждый раз переменной будет присваиваться значение, но, опять-же, для чего присваивать значение каждый раз? По моему это бессмысленно.
    Тогда причём тут вообще switch? Вот тут
    PHP код:
        new time GetTickCount();
        new 
    string[3];
        for(new 
    i!= 100000i++)
        {
            
    format(stringsizeof(string), "%d", function());
            
    SendClientMessageToAll(-1string);
        }
        
    printf("Цикл 1 сработал за %d мс"GetTickCount()-time);

        
    time GetTickCount();
        new 
    func = function();
        for(new 
    i!= 100000i++)
        {
            
    format(stringsizeof(string), "%d"func);
            
    SendClientMessageToAll(-1string);
        }
        
    printf("Цикл 2 сработал за %d мс"GetTickCount()-time); 
    Второй вариант тоже будет работать быстрее, нежели первый. Вы отчаянно не хотите читать мои сообщения и вникать в них, как я посмотрю...
    Последний раз редактировалось DeimoS; 09.09.2014 в 23:04.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  8. #28
    Аватар для Пельмень
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    Хорошо, до этого момента, я думал, что switch при каждой проверке будет вызывать функцию заного, потому что свитч переменной в разы быстрее, чем свитч функции напрямую, выйгрыш в скорости заметен. Конечно, если не присваивать переменной в цикле значение функции по новой, в практике, по крайней мере такого я никогда не видел.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Повторяю в сотый раз. Это не switch быстрее становится, это вы убираете из тела цикла обращение к функции. Это как сравнивать
    PHP код:
    for(new iGetMaxPlayers(); i++) 
    и
    PHP код:
    for(new GetMaxPlayers(); != -1i--) 
    Разница тут в том, что в первом случае мы вызываем функцию GetMaxPlayers каждую итерацию, а во втором - нет.
    switch же оптимизирован сам по себе и не требует каких-то лишних переменных. Да и как вы сделаете то, что требуется автору сей темы, без постоянного обращения к GetPlayerAnimationIndex?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  10. #30
    Аватар для Пельмень
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Повторяю в сотый раз. Это не switch быстрее становится, это вы убираете из тела цикла обращение к функции. Это как сравнивать
    PHP код:
    for(new iGetMaxPlayers(); i++) 
    и
    PHP код:
    for(new GetMaxPlayers(); != -1i--) 
    Разница тут в том, что в первом случае мы вызываем функцию GetMaxPlayers каждую итерацию, а во втором - нет.
    switch же оптимизирован сам по себе и не требует каких-то лишних переменных. Да и как вы сделаете то, что требуется автору сей темы, без постоянного обращения к GetPlayerAnimationIndex?
    Что-то я не припомню, чтобы я говорил, ЧТО SWITCH становится быстрее, это же очевидный бред, сказать, что выбирающий оператор switch будет быстрее, чем выбирающий оператор switch. Тавтология какая-то получается. Может быть это и так, что switch не требует лишних переменных, однако, если использовать if, будет другая история. А использовать switch, как единственный оператор выбора в коде - будет полнейшим бредом, собственно, изначально я хотел сказать про другое.

 

 
Страница 3 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя

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

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

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

Ваши права

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