Просмотр полной версии : [Прочее] О неявной инициализации
Daniel_Cortez
24.03.2017, 17:00
Стоит ли добавить новый пункт о явной инициализации переменных в основные рекомендации (http://pro-pawn.ru/showthread.php?8347)?
Давно уже приходится сталкиваться с подобным кодом:
for (new i; i < MAX_PLAYERS; i++)
Разве это не будет более интуитивно инициализировать переменную teamid нулём в явном виде?
for (new i = 0; i < MAX_PLAYERS; i++)
Код станет немного понятнее, а генерируемый байткод AMX ничуть не ухудшится.
Стоит ли добавить новый пункт о явной инициализации переменных в основные рекомендации (http://pro-pawn.ru/showthread.php?8347)?
Давно уже приходится сталкиваться с подобным кодом:
for (new i; i < MAX_PLAYERS; i++)
Разве это не будет более интуитивно инициализировать переменную teamid нулём в явном виде?
for (new i = 0; i < MAX_PLAYERS; i++)
Код станет немного понятнее, а генерируемый байткод AMX ничуть не ухудшится.
Код будет походить на Си.
Смысла в этом абсолютно нет, но для понятности, я думаю, можно.
Daniel_Cortez
24.03.2017, 19:11
Смысла в этом абсолютно нет, но для понятности, я думаю, можно.
Смысл есть, особенно при переходе на другие ЯП, в которых переменные не инициализируются нулями по умолчанию (если ты только не переходишь на Free Pascal - пока что я видел фичу с инициализацией нулями только в этом диалекте Паскаля и в Pawn).
Смысл есть, особенно при переходе на другие ЯП, в которых переменные не инициализируются нулями по умолчанию (если ты только не переходишь на Free Pascal - пока что я видел фичу с инициализацией нулями только в этом диалекте Паскаля и в Pawn).
Немного поразмыслив, я пришёл к выводу, что это стоит добавить в основные рекомендации. Тем не менее, будут скриптеры, которые начнут писать этот нуль абсолютно при любой инициализации, что, ИМХО, немного затруднит чтение кода.
Пример:
new some_var_1 = 0, some_var_2 = 0, some_var_3 = 0;
Странную тему с нулём вы начали. Автоинициализация - особенность языка. Глупо от неё отказываться только потому, что в каких-то других языках её нет. И так же глупо переходить на другие языки и не изучать, при этом, их особенности. Если это попытка защитить невнимательных людей от ошибок, то эти люди обязательно где-то ещё эти ошибки совершат. Совершат, исправят и больше не будут совершать.
Daniel_Cortez
24.03.2017, 21:42
Немного поразмыслив, я пришёл к выводу, что это стоит добавить в основные рекомендации. Тем не менее, будут скриптеры, которые начнут писать этот нуль абсолютно при любой инициализации, что, ИМХО, немного затруднит чтение кода.
Пример:
new some_var_1 = 0, some_var_2 = 0, some_var_3 = 0;
По мне так наоборот всё предельно ясно. Я точно помню, что у меня уже был с кем-то тему с инициализацией ещё года 4 назад, когда даже написание плагинов к SA-MP было для меня чем-то новым - и явная инициализация переменных тогда практически не затрудняла для меня чтение кода. Ну да, на пару символов больше, и что с того? Зато теперь, когда больше привык к чтению кода на C/C++, при отсутствии явно заданных значений в объявлении переменных на Pawn взгляд невольно останавливается на таком объявлении - и только ради того, чтобы через секунду вспомнить об автоматической инициализации.
Скорее всего, в плане удобства чтения вряд ли можно однозначно выбрать вариант с явной инициализацией или без - всё зависит от предпочтений самого скриптера. Другое дело, насколько это вредно полагаться на фичу с автоинициализацией, как на что-то должное. И, как я уже говорил ранее, это будет иметь значение при переходе на другие ЯП.
Автоинициализация - особенность языка. Глупо от неё отказываться только потому, что в каких-то других языках её нет.
То, что это часть языка, ещё не делает её хорошей практикой. Это всего лишь одна из мер по предотвращению "детских" ошибок (коих в Pawn ещё много), а потому глупо как раз полагаться на неё - если только не планируешь навечно застрять на Pawn или перейти на Free Pascal.
UPD: Только что проверил Pawn Language Guide, там нет ни одного такого примера, в котором одиночная переменная не инициализирована явно и используется с расчётом на то, что в ней 0. Есть переменные, которые не инициализированы при объявлении, но в них всё равно записывается значение перед дальнейшим использованием.
Зато теперь, когда больше привык к чтению кода на C/C++, при отсутствии явно заданных значений в объявлении переменных на Pawn взгляд невольно останавливается на таком объявлении - и только ради того, чтобы через секунду вспомнить об автоматической инициализации.
Кстати, в последнее время я за собой наблюдаю такую же особенность. Полностью согласен.
Я тоже обычно указываю значение, не знаю почему здесь не указал :) . Но сейчас я в основном пишу на JS, а там значение неинициализированных переменных равно undefined, как мне кажется - это лучшее решение.
А по поводу инициализации нескольких переменных, я бы вообще написал так:
new
some_var_1 = 0,
some_var_2 = 0,
some_var_3 = 0;
Довольно опрятно.
Nexius_Tailer
24.03.2017, 22:28
То, что это часть языка, ещё не делает её хорошей практикой. Это всего лишь одна из мер по предотвращению "детских" ошибок (коих в Pawn ещё много), а потому глупо как раз полагаться на неё - если только не планируешь навечно застрять на Pawn или перейти на Free Pascal.
Всё-же за "всем вредом" скрываются лишь индивидуальные привычки. Иначе же ничего не мешает просто юзать эту фичу там, где она есть и не юзать там, где её нет.
UPD: Только что проверил Pawn Language Guide, там нет ни одного такого примера, в котором одиночная переменная не инициализирована явно и используется с расчётом на то, что в ней 0. Есть переменные, которые не инициализированы при объявлении, но в них всё равно записывается значение перед дальнейшим использованием.
А это вообще буквоедство. Будто за неимением примеров с конкретной реализацией по бумажке с инструкцией её не должно быть на практике.
Это фича языка, тем он от того же си и отличается. Действительно странно закрывать глаза на очевидные вещи, да ещё и других на это склонять
То, что это часть языка, ещё не делает её хорошей практикой. Это всего лишь одна из мер по предотвращению "детских" ошибок (коих в Pawn ещё много), а потому глупо как раз полагаться на неё - если только не планируешь навечно застрять на Pawn или перейти на Free Pascal
Так никто и не предлагает полагаться на эту особенность. Просто есть Pawn, в котором переменные инициализируются автоматически и есть C++, в которой переменная забивается мусорным значением. В Pawn ты можешь позволить себе не инициализировать переменные вручную, а в С++ это делать стоит, если от этого зависит работа кода. Не вижу каких-либо проблем с тем, чтоб помнить эту информацию при написании кода на том или ином языке. Поэтому как-то глупо требовать ручную инициализацию переменных в Pawn лишь потому, что в С++ и других языках её нет.
P.S. Поясню, если кто не понял. Я не против ручной инициализации. Я против того, что ручная инициализация может стать обязательной при оформлении работы. Логике конкретно скриптов для SA-MP отсутствие ручной инициализации никак не вредит. А уж если в каком-то другом языке её нет, об этом стоит писать в статьях о том, другом языке, а не в статье о Pawn. Вот и всё :hi: И если в Pawn убрали возможность допускать такую "детскую" ошибку, стоит этим воспользоваться, а не надумывать лишние проблемы.
Так никто и не предлагает полагаться на эту особенность. Просто есть Pawn, в котором переменные инициализируются автоматически и есть C++, в которой переменная забивается мусорным значением. В Pawn ты можешь позволить себе не инициализировать переменные вручную, а в С++ это делать стоит, если от этого зависит работа кода. Не вижу каких-либо проблем с тем, чтоб помнить эту информацию при написании кода на том или ином языке. Поэтому как-то глупо требовать ручную инициализацию переменных в Pawn лишь потому, что в С++ и других языках её нет.
P.S. Поясню, если кто не понял. Я не против ручной инициализации. Я против того, что ручная инициализация может стать обязательной при оформлении работы. Логике конкретно скриптов для SA-MP отсутствие ручной инициализации никак не вредит. А уж если в каком-то другом языке её нет, об этом стоит писать в статьях о том, другом языке, а не в статье о Pawn. Вот и всё :hi:
Быть может, уже остановимся?
Я думаю тут и так всё очевидно. Просто непривычно наблюдать подобную картину, например, переходя с С++ на Pawn, ибо настораживает подобное декларирование. Тем не менее, это дело каждого, указывать нуль или нет, ведь в байт-коде вы получите тот же нуль. Вспомнилось холиварство по поводу оператора return, который также не обязательный в некоторых функциях.
Только следует помнить, что, используя язык С/С++, вам необходимо указывать этот нуль. А вообще, вы должны делать это на автоматизме.
Daniel_Cortez
24.03.2017, 22:47
Я тоже обычно указываю значение, не знаю почему здесь не указал :) . Но сейчас я в основном пишу на JS, а там значение неинициализированных переменных равно undefined, как мне кажется - это лучшее решение.
Вряд ли такое сравнение здесь уместно, ведь это язык из совсем другой категории - без строгой типизации.
Всё-же за "всем вредом" скрываются лишь индивидуальные привычки. Иначе же ничего не мешает просто юзать эту фичу там, где она есть и не юзать там, где её нет.
Вот только глупо полагаться на самого себя и надеяться, что сможешь сразу же при первой необходимости "переключиться" из одного режима в другой. На то они и привычки.
А это вообще буквоедство. Будто за неимением примеров с конкретной реализацией по бумажке с инструкцией её не должно быть на практике.
Это было к тому, что даже автор языка в своём коде не пользуется фичей с автоинициализацией. Наверное, потому что знает, для чего (или от кого) она нужна на самом деле?
Это фича языка, тем он от того же си и отличается. Действительно странно закрывать глаза на очевидные вещи, да ещё и других на это склонять
Странно выдавать контрмеру против ошибок, как преимущество, которым следует пользоваться, как будто это нормальная практика.
Быть может, уже остановимся?
Я думаю, не составит труда подчистить тему перед перемещением её в другой раздел :)
Просто непривычно наблюдать подобную картину, например, переходя с С++ на Pawn, ибо настораживает подобное декларирование.
Ну это не повод теперь требовать от всех обязательной инициализации.
Тем не менее, это дело каждого, указывать нуль или нет, ведь в байт-коде вы получите тот же нуль.
Вот о том и речь. Я же вот писал:
P.S. Поясню, если кто не понял. Я не против ручной инициализации. Я против того, что ручная инициализация может стать обязательной при оформлении работы. Логике конкретно скриптов для SA-MP отсутствие ручной инициализации никак не вредит. А уж если в каком-то другом языке её нет, об этом стоит писать в статьях о том, другом языке, а не в статье о Pawn. Вот и всё :hi: И если в Pawn убрали возможность допускать такую "детскую" ошибку, стоит этим воспользоваться, а не надумывать лишние проблемы.
- - - Добавлено - - -
Это было к тому, что даже автор языка в своём коде не пользуется фичей с автоинициализацией. Наверное, потому что знает, для чего (или от кого) она нужна на самом деле?
Ну так большая часть скриптеров в SA-MP как раз и можно отнести к тем, для кого эта фича создавалась, не? :)
Nexius_Tailer
24.03.2017, 23:12
Это было к тому, что даже автор языка в своём коде не пользуется фичей с автоинициализацией. Наверное, потому что знает, для чего (или от кого) она нужна на самом деле?
В стандартных инклудах да фс с сервером тоже идут не сплошь идеальные решения как в оформлении, так и реализации, так что равняться на чей-то стиль и считать это аргументом только потому, что он создал документацию/стандартные скрипты/что-то ещё никак адекватным решением быть не может. А для чего это нужно на самом деле или не на самом, разницы особой и нет: это выделяет и отличает этот язык от других, и причины этому стоят на втором плане, а то время как на первом именно то, что это возможность языка, которой вполне можно пользоваться.
Собственно, всё уже сказано выше по этой теме, и я реально не понимаю, почему даже такая мелочь может вызывать столько странных в её сторону недоумений
Daniel_Cortez
25.03.2017, 16:47
Ну это не повод теперь требовать от всех обязательной инициализации.
Я и не говорил, что она обязательно везде нужна. Например, она будет лишней, если значение в переменную записывается в дальнейшем, после объявления (напрямую или при передаче по ссылке в функцию, такую как gettime, например).
Ну так большая часть скриптеров в SA-MP как раз и можно отнести к тем, для кого эта фича создавалась, не? :)
Большинство - не показатель. Миллионы мух тоже на всякое слетаются.
Ок, попробую подытожить свою мысль, которую пытался высказать в постах выше.
Касаемо отказа от автоинициализации: знать о том или ином свойстве языка и полагаться на него - немного разные вещи.
Да, автоинициализация - это часть Pawn. Но и что с того? Почему отказываться от её использования должно быть глупо? Простого знания о факте её существования уже недостаточно?
И вообще, намеренный отказ от того или иного свойства ЯП - это какой-то универсальный показатель некомпетентности, что ли?
Вот кто-нибудь здесь знает, почему на "new Float:x = 0;" компилятор выдаёт ошибку из-за неправильного тега, а на "new bool:b = 0;" нет? Вы наверняка когда-нибудь имели дело с этой "фичей" языка, но вряд ли те случаи были настолько значительными, чтобы их запомнить, а потому сможете ли вспомнить и ответить на вопрос сразу? Скорее всего, нет - а значит вы не достойны скриптить на Pawn (*донор сарказма*).
ИМХО, сомнительно даже называть автоинициализацию "фичей" языка. Как я уже говорил, она была добавлена для предотвращения ошибок, связанных с мусорными значениями в случаях, когда горе-кодер забыл инициализировать переменную. И таких решений в Pawn и AMX ещё предостаточно - такова природа языка Pawn. Иными словами, это просто дополнительная мера контроля, а не какое-то первостепенное свойство.
И потому это выглядит немного странно, когда другие на него полагаются, как будто так и нужно. И ещё страннее это выглядит, когда они учат других делать точно так же, т.к. это свойство относится к разряду неинтуитивных - его нет в подавляющем большинстве других языков и потому злоупотребление им приведёт к проблемам при переходе на другие ЯП.
Это контрпродуктивно.
P.S.: Вынес дискуссию в отдельную тему и немного отредактировал первые посты, чтобы обсуждение не затрагивало изначальную тему (http://pro-pawn.ru/showthread.php?15081).
Я и не говорил, что она обязательно везде нужна. Например, она будет лишней, если значение в переменную записывается в дальнейшем, после объявления (напрямую или при передаче по ссылке в функцию, такую как gettime, например).
Но ты предлагал добавить новый пункт в рекомендации, не? :)
Стоит ли добавить новый пункт о явной инициализации переменных в основные рекомендации (http://pro-pawn.ru/showthread.php?8347)?
Насчёт этого я и "протестую".
Да и выборочная инициализация тоже пользы не принесёт, а лишь запутает новичков, которые в одном коде будут видеть эту самую инициализацию, а в другом (а такого в разы больше) - не будут.
Большинство - не показатель. Миллионы мух тоже на всякое слетаются.
А на кого тогда ориентироваться, если не на большинство? Если форум создан для тру-скриптеров, которые уже разбираются в Pawn, то смысл тогда от статей и от рекомендаций?
Под ориентированием я подразумеваю фильтрацию информации, которую форум собирается лить в ума людей, если что.
Касаемо отказа от автоинициализации: знать о том или ином свойстве языка и полагаться на него - немного разные вещи.
Да, автоинициализация - это часть Pawn. Но и что с того? Почему отказываться от её использования должно быть глупо? Простого знания о факте её существования уже недостаточно?
Глупо не отказываться от неё, а навязывать другим свою мысль об отказе. С таким же успехом сейчас можно начать навязывать стиль отступов или фоновое оформление для редактора. Или вообще в правило возвести использование определённого редактора с синтаксисом С++, дабы тем, кто потом переходил на изучение С++, было проще. Будто раздел о Pawn - инкубатор Си-кодеров...
То, что предлагаешь делать ты - медвежья услуга, как по мне. Ты предлагаешь забить головы людей лишним "правилом"
лишь потому, что 1 процент из них вдруг потом решит перейти к изучению С++ (хотя если они будут постоянно страдать от того, что будут забывать инициализировать переменную - это лишь их проблемы и показатель того, что о программировании с такой внимательностью лучше забыть). Во многих языках есть свои особенности глупо отказываться от них лишь потому, что в другом языке этого нет.
Ты говоришь о контрпродуктивности, но, при этом, предлагаешь всем писать по, как минимум, 2 лишних символа лишь потому, что в каком-то другом языке, который большинство и не увидит никогда, чего-то там нет. Как-то не получается логическую цепочку выстроить...
Взять тот же вопрос общего оформления кода. В данном случае общий стиль важен лишь потому, что это действительно упростит жизнь как тебе при чтении чужого кода, так и тому, кто твой код будет разбирать.
Что же мы получим при отказе от инициализации? То, что какой-то невнимательный Вася Пупкин не удосужится прочесть документацию к языку и словит проблему, которая натолкнёт его на изучение этой документации и не более.
Такое чувство, что в твоём понимании все люди, что пишут код, отключают голову и делают всё на автомате, не задумываясь над тем, на каком ЯП они его пишут и какие могут быть последствия. И твоё предложение схоже с решением создателей Pawn: ты пытаешься защитить горе-кодеров от ошибок, которые они и так допустят, если они горе-кодеры. Какой в этом смысл?
И да, я хочу ещё раз напомнить: я не против автоинициализации как таковой. Хочется конкретному кодеру инициализировать переменные вручную - пожалуйста. Но требовать ото всех это, добавляя дополнительный пункт в рекомендации (к которым, хочу напомнить, обычно ссылаются при оценке темы и переносе её с подраздела для фильтрации в нормальный раздел) - это будет нереально глупо.
Daniel_Cortez
25.03.2017, 20:17
Да и выборочная инициализация тоже пользы не принесёт, а лишь запутает новичков, которые в одном коде будут видеть эту самую инициализацию, а в другом (а такого в разы больше) - не будут.
По такой логике можно поставить под сомнение существование всего раздела "Уроки". Зачем там все эти статьи, если пользователи всё равно могут видеть в сотни раз больше кода на всяких г-и?
запутает новичков
Хотелось бы это выделить отдельно. На самом деле не так уж и сложно понять, в каких переменных стоит указывать начальные значения, а в каких значения будут записаны позже. Главное просто понимать логику реализуемого алгоритма. Сужу по тому, как сам этому учился ещё в школе, разве что там вместо Pawn был Turbo Pascal.
С таким же успехом сейчас можно начать навязывать стиль отступов или фоновое оформление для редактора. Или вообще в правило возвести использование определённого редактора с синтаксисом С++, дабы тем, кто потом переходил на изучение С++, было проще. Будто раздел о Pawn - инкубатор Си-кодеров...
Ты хоть предупреждай в следующий раз, прежде чем переходить в крайности.
Ты предлагаешь забить головы людей лишним "правилом"
В то же время пропуск "0" и при этом необходимость указывать любое другое значение при инициализации - это тоже как лишнее правило. Вернее, лишнее исключение из правил.
И я не совсем понимаю, почему ты пытаешься это исключение защитить. Просто потому, что это часть языка?
Что я хотел предложить с самого начала - просто забыть об этом исключении (вернее, не то, чтобы совсем забыть его, а просто не хранить в "кэше", если так можно выразиться). А там, где изначальное значение переменной указывать не нужно (как в том же случае с gettime) - оставить как есть.
Кто этого принципа уже придерживается, тех это нисколько не затронет. Тем же, кто пропускает инициализацию нулём - будет одним исключением из правил меньше.
По сути, никаких новых правил запоминать не нужно - даже наоборот, одним меньше.
Единственный минус, который здесь очевиден - придётся печатать на 2-4 символа больше, но это имеет значение только при _очень_ низкой скорости печати.
Ты говоришь о контрпродуктивности, но, при этом, предлагаешь всем писать по, как минимум, 2 лишних символа лишь потому, что в каком-то другом языке, который большинство и не увидит никогда, чего-то там нет.
Собственно, я уже пытался выразить вышесказанное о лишнем исключении из правил в предыдущих постах, но под беглой формулировкой "контринтуитивно" вряд ли можно было понять всю суть. Если это действительно так - каюсь.
Что же мы получим при отказе от инициализации? То, что какой-то невнимательный Вася Пупкин не удосужится прочесть документацию к языку и словит проблему, которая натолкнёт его на изучение этой документации и не более.
Как будто сейчас кто-то из новичков при первой же возможности потянется за Language Guide -_-
Такое чувство, что в твоём понимании все люди, что пишут код, отключают голову и делают всё на автомате, не задумываясь над тем, на каком ЯП они его пишут и какие могут быть последствия.
Такого у меня в мыслях даже не было. А что ошибки - так они время от времени свойственны всем.
И твоё предложение схоже с решением создателей Pawn: ты пытаешься защитить горе-кодеров от ошибок, которые они и так допустят, если они горе-кодеры. Какой в этом смысл?
Где ты увидел хоть один намёк на это? Всё, что я предлагаю - небольшая стилистическая поправка, которая вполне логична по причинам, описанным выше.
По такой логике можно поставить под сомнение существование всего раздела "Уроки". Зачем там все эти статьи, если пользователи всё равно могут видеть в сотни раз больше кода на всяких г-и?
Это уже в крайности какие-то пошёл ты: сравнивать пропуск инициализации, который ровным счётом ничего в пределах Pawn не меняет и откровенный говнокод, который чаще просто не работает.
Хотелось бы это выделить отдельно. На самом деле не так уж и сложно понять, в каких переменных стоит указывать начальные значения, а в каких значения будут записаны позже. Главное просто понимать логику реализуемого алгоритма. Сужу по тому, как сам этому учился ещё в школе, разве что там вместо Pawn был Turbo Pascal.
Так а зачем? Гораздо полезнее будет написать статью о инициализации в разделе С++, а не добавлять бессмысленные пункты в рекомендации. И хоть финальное решение всё равно остаётся за тобой, но сейчас это больше походит на "я так хочу и всё тут"
В то же время пропуск "0" и при этом необходимость указывать любое другое значение при инициализации - это тоже как лишнее правило. Вернее, лишнее исключение из правил.
Это "исключение из правил" распространено и привычно сообществу. А вот обязательная инициализация заставит людей править свои работы перед тем, как выкладывать их на этот форум (что многие просто не будут делать или просто не будут лить работы на форум)
И я не совсем понимаю, почему ты пытаешься это исключение защитить. Просто потому, что это часть языка?
А почему ты пытаешься это исключение запретить? Просто потому что в других языках всё не так и тебе привычнее иначе?
Мои причины описаны выше. И не только в этом сообщении.
Что я хотел предложить с самого начала - просто забыть об этом исключении (вернее, не то, чтобы совсем забыть его, а просто не хранить в "кэше", если так можно выразиться). А там, где изначальное значение переменной указывать не нужно (как в том же случае с gettime) - оставить как есть.
Так а в чём профит от этого конкретно в границах Pawn?
Тем же, кто пропускает инициализацию нулём - будет одним исключением из правил меньше.
По сути, никаких новых правил запоминать не нужно - даже наоборот, одним меньше.
Эмм, что? Ты думаешь, что люди, которые пропускают инициализацию, задумываются над этим действием?
Единственный минус, который здесь очевиден - придётся печатать на 2-4 символа больше, но это имеет значение только при _очень_ низкой скорости печати.
С такой логикой и написание кода в одну строку можно свести к тому, что это неудобно лишь для людей с _очень_ узким монитором.
Лишние действия в любом случае совершаются: быстро ты их делаешь или нет. И это уже не совсем продуктивно, не? Зато Си-кодеры удовлетворены (но это не точно).
Такого у меня в мыслях даже не было. А что ошибки - так они время от времени свойственны всем.
Так в том и суть: те, кто кодят на уровне рефлексов, а не включают мозг, в любом случае допустят ошибку: будешь ты о них заботиться или нет.
Где ты увидел хоть один намёк на это? Всё, что я предлагаю - небольшая стилистическая поправка, которая вполне логична по причинам, описанным выше.
Все причины сводятся к "в других языках иначе", не? Какой-то слабый аргумент, как по мне. Больше похоже на "Создатель Pawn сделал автоинициализацию для того, чтоб нубы не допускали ошибок, но я-то не нуб, поэтому к чёрту её!!!111!".
Я считаю, что функционал языка нужно использовать по полной программе, каким бы он не был. Иначе можно смело добавлять в рекомендации запрет на
value = value + 2;
и разрешить только
value += 2;
new variable = 1;
if(variable == 1)
и
new variable = 1;
if(1 == variable)// От этого, кстати, больше пользы будет, чем от инициализации
Получится тот же смысл.
Daniel_Cortez
25.03.2017, 21:33
И хоть финальное решение всё равно остаётся за тобой
Вовсе нет. Финальное решение - за пользователями форума, иначе в чём смысл был устраивать всё это обсуждение?
Если такие мелочи, как отсутствие исключения из правил при инициализации нулём, могут вызвать столько сложностей, то вряд ли есть смысл добавлять его в рекомендации.
Впрочем, свою точку зрения я вряд ли изменю, но это по большей части из-за лишних предпочтений и самой природы языка Pawn, создатель которого явно был сильно зациклен на безопасности в ущерб функциональности (впрочем, кто я такой, чтобы его осуждать? -_-)
Касаемо автоинициализации, я всё же считаю её не самым удачным решением. Вместо того, чтобы молчать по поводу забытой инициализации, можно было бы просто добавить варнинг, если где-то используется неинициализированная переменная - именно так обычно и делается в других компиляторах. Free Pascal, MSVC++, GCC, Clang - это лишь одни из немногих примеров, где это приходилось наблюдать, на самом деле их куда больше (и что интересно, в Free Pascal предупреждение выдаётся даже несмотря на то, что там тоже есть такая же "особенность языка" с автоматической инициализацией нулями). Хотя вполне возможно, что автор Pawn не стал делать этот варнинг, чтобы не усложнять лишний раз код компилятора, кто знает...
Я согласен с тобой во всём, кроме добавления пункта в рекомендации (это я про весь наш диалог в целом говорю, а не только про твоё последнее сообщение). Если и вводить такой пункт, то как-то постепенно (в том же учебнике Pro-Pawn сначала описать зачем и для чего так делать. Или в статье отдельной, которую потом продвигать, как когда-то продвигали тему с оформлением кода), ибо иначе большинство просто не будет его соблюдать из-за того, что не привыкли так делать, а с рекомендациями, как ты мог заметить, далеко не каждый ознакамливается при написании статей. Хотя всё равно считаю, что о тонкостях С++ нужно писать в разделе С++, а не в разделе Pawn.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot