PDA

Просмотр полной версии : [Прочее] О неявной инициализации



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 ничуть не ухудшится.

VVWVV
24.03.2017, 17:15
Стоит ли добавить новый пункт о явной инициализации переменных в основные рекомендации (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).

VVWVV
24.03.2017, 19:47
Смысл есть, особенно при переходе на другие ЯП, в которых переменные не инициализируются нулями по умолчанию (если ты только не переходишь на Free Pascal - пока что я видел фичу с инициализацией нулями только в этом диалекте Паскаля и в Pawn).

Немного поразмыслив, я пришёл к выводу, что это стоит добавить в основные рекомендации. Тем не менее, будут скриптеры, которые начнут писать этот нуль абсолютно при любой инициализации, что, ИМХО, немного затруднит чтение кода.

Пример:


new some_var_1 = 0, some_var_2 = 0, some_var_3 = 0;

DeimoS
24.03.2017, 20:43
Странную тему с нулём вы начали. Автоинициализация - особенность языка. Глупо от неё отказываться только потому, что в каких-то других языках её нет. И так же глупо переходить на другие языки и не изучать, при этом, их особенности. Если это попытка защитить невнимательных людей от ошибок, то эти люди обязательно где-то ещё эти ошибки совершат. Совершат, исправят и больше не будут совершать.

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. Есть переменные, которые не инициализированы при объявлении, но в них всё равно записывается значение перед дальнейшим использованием.

VVWVV
24.03.2017, 21:56
Зато теперь, когда больше привык к чтению кода на C/C++, при отсутствии явно заданных значений в объявлении переменных на Pawn взгляд невольно останавливается на таком объявлении - и только ради того, чтобы через секунду вспомнить об автоматической инициализации.


Кстати, в последнее время я за собой наблюдаю такую же особенность. Полностью согласен.

ziggi
24.03.2017, 22:01
Я тоже обычно указываю значение, не знаю почему здесь не указал :) . Но сейчас я в основном пишу на 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. Есть переменные, которые не инициализированы при объявлении, но в них всё равно записывается значение перед дальнейшим использованием.
А это вообще буквоедство. Будто за неимением примеров с конкретной реализацией по бумажке с инструкцией её не должно быть на практике.

Это фича языка, тем он от того же си и отличается. Действительно странно закрывать глаза на очевидные вещи, да ещё и других на это склонять

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

Так никто и не предлагает полагаться на эту особенность. Просто есть Pawn, в котором переменные инициализируются автоматически и есть C++, в которой переменная забивается мусорным значением. В Pawn ты можешь позволить себе не инициализировать переменные вручную, а в С++ это делать стоит, если от этого зависит работа кода. Не вижу каких-либо проблем с тем, чтоб помнить эту информацию при написании кода на том или ином языке. Поэтому как-то глупо требовать ручную инициализацию переменных в Pawn лишь потому, что в С++ и других языках её нет.

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

VVWVV
24.03.2017, 22:46
Так никто и не предлагает полагаться на эту особенность. Просто есть Pawn, в котором переменные инициализируются автоматически и есть C++, в которой переменная забивается мусорным значением. В Pawn ты можешь позволить себе не инициализировать переменные вручную, а в С++ это делать стоит, если от этого зависит работа кода. Не вижу каких-либо проблем с тем, чтоб помнить эту информацию при написании кода на том или ином языке. Поэтому как-то глупо требовать ручную инициализацию переменных в Pawn лишь потому, что в С++ и других языках её нет.

P.S. Поясню, если кто не понял. Я не против ручной инициализации. Я против того, что ручная инициализация может стать обязательной при оформлении работы. Логике конкретно скриптов для SA-MP отсутствие ручной инициализации никак не вредит. А уж если в каком-то другом языке её нет, об этом стоит писать в статьях о том, другом языке, а не в статье о Pawn. Вот и всё :hi:

Быть может, уже остановимся?

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

Только следует помнить, что, используя язык С/С++, вам необходимо указывать этот нуль. А вообще, вы должны делать это на автоматизме.

Daniel_Cortez
24.03.2017, 22:47
Я тоже обычно указываю значение, не знаю почему здесь не указал :) . Но сейчас я в основном пишу на JS, а там значение неинициализированных переменных равно undefined, как мне кажется - это лучшее решение.
Вряд ли такое сравнение здесь уместно, ведь это язык из совсем другой категории - без строгой типизации.



Всё-же за "всем вредом" скрываются лишь индивидуальные привычки. Иначе же ничего не мешает просто юзать эту фичу там, где она есть и не юзать там, где её нет.
Вот только глупо полагаться на самого себя и надеяться, что сможешь сразу же при первой необходимости "переключиться" из одного режима в другой. На то они и привычки.



А это вообще буквоедство. Будто за неимением примеров с конкретной реализацией по бумажке с инструкцией её не должно быть на практике.
Это было к тому, что даже автор языка в своём коде не пользуется фичей с автоинициализацией. Наверное, потому что знает, для чего (или от кого) она нужна на самом деле?



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

DeimoS
24.03.2017, 22:50
Быть может, уже остановимся?

Я думаю, не составит труда подчистить тему перед перемещением её в другой раздел :)


Просто непривычно наблюдать подобную картину, например, переходя с С++ на 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).

DeimoS
25.03.2017, 17:30
Я и не говорил, что она обязательно везде нужна. Например, она будет лишней, если значение в переменную записывается в дальнейшем, после объявления (напрямую или при передаче по ссылке в функцию, такую как 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: ты пытаешься защитить горе-кодеров от ошибок, которые они и так допустят, если они горе-кодеры. Какой в этом смысл?
Где ты увидел хоть один намёк на это? Всё, что я предлагаю - небольшая стилистическая поправка, которая вполне логична по причинам, описанным выше.

DeimoS
25.03.2017, 20:52
По такой логике можно поставить под сомнение существование всего раздела "Уроки". Зачем там все эти статьи, если пользователи всё равно могут видеть в сотни раз больше кода на всяких г-и?

Это уже в крайности какие-то пошёл ты: сравнивать пропуск инициализации, который ровным счётом ничего в пределах 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 не стал делать этот варнинг, чтобы не усложнять лишний раз код компилятора, кто знает...

DeimoS
26.03.2017, 00:25
Я согласен с тобой во всём, кроме добавления пункта в рекомендации (это я про весь наш диалог в целом говорю, а не только про твоё последнее сообщение). Если и вводить такой пункт, то как-то постепенно (в том же учебнике Pro-Pawn сначала описать зачем и для чего так делать. Или в статье отдельной, которую потом продвигать, как когда-то продвигали тему с оформлением кода), ибо иначе большинство просто не будет его соблюдать из-за того, что не привыкли так делать, а с рекомендациями, как ты мог заметить, далеко не каждый ознакамливается при написании статей. Хотя всё равно считаю, что о тонкостях С++ нужно писать в разделе С++, а не в разделе Pawn.