Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 20
  1. #1
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±

    О неявной инициализации

    Стоит ли добавить новый пункт о явной инициализации переменных в основные рекомендации?
    Давно уже приходится сталкиваться с подобным кодом:
    PHP код:
    for (new iMAX_PLAYERSi++) 
    Разве это не будет более интуитивно инициализировать переменную teamid нулём в явном виде?
    PHP код:
    for (new 0MAX_PLAYERSi++) 
    Код станет немного понятнее, а генерируемый байткод AMX ничуть не ухудшится.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  2. #2
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Стоит ли добавить новый пункт о явной инициализации переменных в основные рекомендации?
    Давно уже приходится сталкиваться с подобным кодом:
    PHP код:
    for (new iMAX_PLAYERSi++) 
    Разве это не будет более интуитивно инициализировать переменную teamid нулём в явном виде?
    PHP код:
    for (new 0MAX_PLAYERSi++) 
    Код станет немного понятнее, а генерируемый байткод AMX ничуть не ухудшится.
    Код будет походить на Си.

    Смысла в этом абсолютно нет, но для понятности, я думаю, можно.
    Последний раз редактировалось VVWVV; 24.03.2017 в 17:27.

  3. #3
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

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

  4. #4
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Смысл есть, особенно при переходе на другие ЯП, в которых переменные не инициализируются нулями по умолчанию (если ты только не переходишь на Free Pascal - пока что я видел фичу с инициализацией нулями только в этом диалекте Паскаля и в Pawn).
    Немного поразмыслив, я пришёл к выводу, что это стоит добавить в основные рекомендации. Тем не менее, будут скриптеры, которые начнут писать этот нуль абсолютно при любой инициализации, что, ИМХО, немного затруднит чтение кода.

    Пример:
    PHP код:
    new some_var_1 0some_var_2 0some_var_3 0

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

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

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

    Steve Pavlina

  6. #6
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Немного поразмыслив, я пришёл к выводу, что это стоит добавить в основные рекомендации. Тем не менее, будут скриптеры, которые начнут писать этот нуль абсолютно при любой инициализации, что, ИМХО, немного затруднит чтение кода.

    Пример:
    PHP код:
    new some_var_1 0some_var_2 0some_var_3 0
    По мне так наоборот всё предельно ясно. Я точно помню, что у меня уже был с кем-то тему с инициализацией ещё года 4 назад, когда даже написание плагинов к SA-MP было для меня чем-то новым - и явная инициализация переменных тогда практически не затрудняла для меня чтение кода. Ну да, на пару символов больше, и что с того? Зато теперь, когда больше привык к чтению кода на C/C++, при отсутствии явно заданных значений в объявлении переменных на Pawn взгляд невольно останавливается на таком объявлении - и только ради того, чтобы через секунду вспомнить об автоматической инициализации.

    Скорее всего, в плане удобства чтения вряд ли можно однозначно выбрать вариант с явной инициализацией или без - всё зависит от предпочтений самого скриптера. Другое дело, насколько это вредно полагаться на фичу с автоинициализацией, как на что-то должное. И, как я уже говорил ранее, это будет иметь значение при переходе на другие ЯП.


    Цитата Сообщение от DeimoS Посмотреть сообщение
    Автоинициализация - особенность языка. Глупо от неё отказываться только потому, что в каких-то других языках её нет.
    То, что это часть языка, ещё не делает её хорошей практикой. Это всего лишь одна из мер по предотвращению "детских" ошибок (коих в Pawn ещё много), а потому глупо как раз полагаться на неё - если только не планируешь навечно застрять на Pawn или перейти на Free Pascal.


    UPD: Только что проверил Pawn Language Guide, там нет ни одного такого примера, в котором одиночная переменная не инициализирована явно и используется с расчётом на то, что в ней 0. Есть переменные, которые не инициализированы при объявлении, но в них всё равно записывается значение перед дальнейшим использованием.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  7. #7
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Зато теперь, когда больше привык к чтению кода на C/C++, при отсутствии явно заданных значений в объявлении переменных на Pawn взгляд невольно останавливается на таком объявлении - и только ради того, чтобы через секунду вспомнить об автоматической инициализации.
    Кстати, в последнее время я за собой наблюдаю такую же особенность. Полностью согласен.

  8. #8
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Я тоже обычно указываю значение, не знаю почему здесь не указал :) . Но сейчас я в основном пишу на JS, а там значение неинициализированных переменных равно undefined, как мне кажется - это лучшее решение.

    А по поводу инициализации нескольких переменных, я бы вообще написал так:
    PHP код:
    new
        
    some_var_1 0,
        
    some_var_2 0,
        
    some_var_3 0
    Довольно опрятно.

  9. #9
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    То, что это часть языка, ещё не делает её хорошей практикой. Это всего лишь одна из мер по предотвращению "детских" ошибок (коих в Pawn ещё много), а потому глупо как раз полагаться на неё - если только не планируешь навечно застрять на Pawn или перейти на Free Pascal.
    Всё-же за "всем вредом" скрываются лишь индивидуальные привычки. Иначе же ничего не мешает просто юзать эту фичу там, где она есть и не юзать там, где её нет.

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    UPD: Только что проверил Pawn Language Guide, там нет ни одного такого примера, в котором одиночная переменная не инициализирована явно и используется с расчётом на то, что в ней 0. Есть переменные, которые не инициализированы при объявлении, но в них всё равно записывается значение перед дальнейшим использованием.
    А это вообще буквоедство. Будто за неимением примеров с конкретной реализацией по бумажке с инструкцией её не должно быть на практике.

    Это фича языка, тем он от того же си и отличается. Действительно странно закрывать глаза на очевидные вещи, да ещё и других на это склонять
    Последний раз редактировалось Nexius_Tailer; 24.03.2017 в 22:33.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    То, что это часть языка, ещё не делает её хорошей практикой. Это всего лишь одна из мер по предотвращению "детских" ошибок (коих в Pawn ещё много), а потому глупо как раз полагаться на неё - если только не планируешь навечно застрять на Pawn или перейти на Free Pascal
    Так никто и не предлагает полагаться на эту особенность. Просто есть Pawn, в котором переменные инициализируются автоматически и есть C++, в которой переменная забивается мусорным значением. В Pawn ты можешь позволить себе не инициализировать переменные вручную, а в С++ это делать стоит, если от этого зависит работа кода. Не вижу каких-либо проблем с тем, чтоб помнить эту информацию при написании кода на том или ином языке. Поэтому как-то глупо требовать ручную инициализацию переменных в Pawn лишь потому, что в С++ и других языках её нет.

    P.S. Поясню, если кто не понял. Я не против ручной инициализации. Я против того, что ручная инициализация может стать обязательной при оформлении работы. Логике конкретно скриптов для SA-MP отсутствие ручной инициализации никак не вредит. А уж если в каком-то другом языке её нет, об этом стоит писать в статьях о том, другом языке, а не в статье о Pawn. Вот и всё И если в Pawn убрали возможность допускать такую "детскую" ошибку, стоит этим воспользоваться, а не надумывать лишние проблемы.
    Последний раз редактировалось DeimoS; 24.03.2017 в 22:44.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

 

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

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

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

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

Ваши права

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