Перейти к публикации
Форум - ComputerCraft
  • записей
    8
  • комментариев
    47
  • просмотров
    21 497

Для новичков в программировании

qwertyMAN

1 726 просмотров

Доброго времени суток, игроки.
Я тут решил написать небольшой сборник советов для начинающих программистов.
Возможно кому нибудь понадобится.

 

1 проблема: не использование булева
В чём суть проблемы: игроки используют 1 и 0 как включено и выключено. Вместо true и false, как это надо делать.
В чём причина проблемы: булева занимают минимальное из всех типов данных место. Булева поддерживают такую операцию как x = not x, которая так быстро прижилась в моём коде для создания переключателей. В добавок и сам код выглядит красивее, не нужно ставить комменты в коде что означает 1 и 0.

 

2 проблема: комментировать всё подряд (если это не обучающий код)
Способ решения: со временем приходит осознание того что ты делаешь и как. Если код написан так как надо, то тут и комменты не нужны. Любой прогер взглянет и поймёт что в переменных x и y хранятся координаты. Комменты следует ставить там где они действительно нужны

 

3 проблема: использование чего то вроде этого if x==true then ... end. В чём ошибка? Да в том что сравнение тут совершенно не нужно. Достаточно написать if x then ... end чтобы условие выполнялось, когда x чему либо равен, кроме false и nil.

 

4 проблема: длинный комменты, там где они могут замениться более простым пояснением что к чему.
Способ решения: нарисовать псевдографикой поясняющий рисунок между символами --[[ и ]]. Внутри них всё воспринимается как коммент. Вот пример:

jqFU5bI.png


Итак что мы видим в примере? Это игра Cube. Здесь мы видим такую строку как door.pos={false,false,false,false} (в проге она означает положение дверей, закрыты они или открыты). Но без комментов не понять под каким номером какая комната. Можно было бы написать 4 коммента и расписать что 1 - верхняя комната и так далее что не так удобно. Но при помощи псевдографики можно очень понятный рисунок нарисовать, который сразу все вопросы закроет.

 

5 проблема: использование глобальных переменных.
Это очень важный пункт. В большинстве случаев в проге используются локальные переменные (в том числе и локальные функции).
Это позволит экономить память, так как когда задаются локальные переменные в функции, по завершении этой функции они все удаляться из памяти. Освободив как саму переменную, которую мы сможем использовать с таким же именем, так и место в памяти. В общем, экономия и порядок будет в коде тех кто использует локальные переменные.

 

Способы выявления ошибка:
Как правило строку в которой произошла ошибка и путь к ней пишется на экране, где бы вы lua не использовали.
Но если случилась непонятная ситуация - ставьте print(здесь нужная переменная). Так мы сможем проверить, соответствует ли переменная тому что мы хотим получить. Если нет - решаем причину несоответствия. А так же мы можем написать следующую конструкцию print(type(x)), где мы проверим тип переменной x ( в вашем случае другой переменной). Для чего нужно? А вот например случается беда когда числовая переменная с какой то кстати становится строкой. (как произошло в моей проге Open Clicker). В итоге цифра как бы есть, но не производятся всяческие вычисления. Так как тип переменной - string. В данной ситуации на помощь приходят функции tostring() и tonumber() которые пытаются перевести переменную в стоку и число. Например tonumber("1".."02"). В данном случае две string строки сложатся в одну строку и переведутся в тип число.

 

Как предотвратить ошибки:
Учиться программировать.
Использовать хороший текстовый редактор с подсветкой синтаксиса (очень помогает при выявлении лишнего или недостающего end). У меня вот стоит Notepad++, поддерживает вкладки что тоже удобно. Да и нумерация строк полезна.
Не в коем случае не программируйте в стандартном блокноте или ещё хуже в OpenOS. Это возможно, но крайне не удобно.

  • Like 4


12 комментариев


Рекомендованные комментарии

Есть еще sublime text тоже не плохой. А почему булевый тип булева называется? Не обычные названия как-то.

Поделиться комментарием


Ссылка на комментарий

Кверти, посмотрел твои исходники, в принципе пишешь неплохо и красиво.

Но мне кажется ты поторопился с советами.

 

1, 3: Высосано из пальца. Я такого еще не видел, да и проблемы у новичков куда больше чем 1 0 или сравнение. Выигрыш памяти крошечный.

2, 4: Посмотри на код ESC - да там можно матершиную сказку про медведЕй найти. Но при этом код рабочий, и идеи реализовываются крутые. Ты придираешься зазря.
 

5: Ну, тут всё верно, глобальные переменные - зло.

 

Но всё равно, всё это ничтожно по сравнению с отсутствием форматирования и отступов, самоповторением и нелинейностью (по двадцать вложенных блоков aka "лесенка").

Поделиться комментарием


Ссылка на комментарий

 

 

1, 3: Высосано из пальца. Я такого еще не видел, да и проблемы у новичков куда больше чем 1 0 или сравнение. Выигрыш памяти крошечный.

А что если я скажу что на личном опыте когда то давно писал if x==true, 1 и 0 и прочее? Ещё когда на vbs сидел.

От незнания языка и не такое напишешь. А без отступов так вообще не удобно читать код. + в обычном редакторе который не подсвечивает ничего.

Поделиться комментарием


Ссылка на комментарий

А что если я скажу что на личном опыте когда то давно писал if x==true, 1 и 0 и прочее? Ещё когда на vbs сидел.

От незнания языка и не такое напишешь. А без отступов так вообще не удобно читать код. + в обычном редакторе который не подсвечивает ничего.

Я сам так пишу иногда. Есть условия, когда if value == true then необходимо.

Да и while 1 do тоже иногда пишу, ибо короче чем true.

 

Это как бы всё не важно, я считаю. Пока "новичек" сам не пожелает, будут у него переменные в роде peremennaya_asdasd.

  • Like 1

Поделиться комментарием


Ссылка на комментарий
Кверти, посмотрел твои исходники, в принципе пишешь неплохо и красиво.

Но мне кажется ты поторопился с советами.

 

1, 3: Высосано из пальца. Я такого еще не видел, да и проблемы у новичков куда больше чем 1 0 или сравнение. Выигрыш памяти крошечный.

2, 4: Посмотри на код ESC - да там можно матершиную сказку про медведЕй найти. Но при этом код рабочий, и идеи реализовываются крутые. Ты придираешься зазря.

 

5: Ну, тут всё верно, глобальные переменные - зло.

 

Но всё равно, всё это ничтожно по сравнению с отсутствием форматирования и отступов, самоповторением и нелинейностью (по двадцать вложенных блоков aka "лесенка").

 

Может и высосано, но хотя бы по теме форума, в последнее время один флуд и оффтоп.

  • Like 1

Поделиться комментарием


Ссылка на комментарий
2, 4: Посмотри на код ESC - да там можно матершиную сказку про медведЕй найти. Но при этом код рабочий, и идеи реализовываются крутые. Ты придираешься зазря.

 

Идею с использованием поясняющих рисунков я нашёл в одной довольно известной проприетарной стратежки в ini файлах.

Мне показалось это довольно хороших способ наглядно, быстро и точно продемонстрировать какой цифрой что ты называешь.

Лично мне такая фишка очень нравится. Вместо того чтобы писать "--цифрой 1 я называю первый слот сверху -- цифрой 2 - первый слот снизу", и так далее, проще нарисовать рисунок и всё. Я говорю про случай когда комменты необходимы и скорее всего игроки будут читать твой код и спрашивать, а что обозначают эти индексы массива.

 

P.S. Ничто не мешает вам - мастерам lua программирования написать тему и изложить все аспекты красивого программирования. Лично я не видел подобных тем, особенно в последнее время.

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

  • Like 1

Поделиться комментарием


Ссылка на комментарий

 

 

А почему булевый тип булева называется? Не обычные названия как-то.

Вспомнился такой интересный пример как русский - русич.

 

Странно когда все слова из списка - существительные, а что то одно - прилагательное.

Например: китаец, японец, белорус, русский.

Или как у меня: строка, число, функция, булевый.

Тебе не кажется это странным? Возникает вопрос, чем этот тип данных хуже что он прилагательное?

Поделиться комментарием


Ссылка на комментарий

О, классная тема, qwertyMAN! Спасибо, что напомнил мне опубликовать позабытый текст. Заходи на огонек.

 

пп.1,3: Krutoy уже всё объяснил. Высосано из пальца. Следует исходить из требований задачи, а если они тебя не ограничивают – то из личных предпочтений.

пп.2,4: Тема комментариев весьма противоречива и холиварна.

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

Во-вторую очередь код нужно комментировать так, чтобы он был понятен потенциальному читателю. Читатель бывает разный, на каждого не угодишь, поэтому в случае сомнений думай в первую очередь о том, сможешь ли ты сам быстро понять свой код, например, через год.

 

Дилемма: использовать длинные и легко читаемые названия переменных или же использовать короткие, один раз прокомментировав их?

Я в небольшом проекте предпочитаю короткие названия с комментариями: код короче, и читается быстрее.

В проекте с большим количеством переменных удобны более длинные названия переменных.

Но опять же, всё относительно. Есть, например, ООП, пространства имен и прочее, позволяющие уменьшить количество переменных в зоне видимости.

 

В целом спорные советы, смущающие новичков. Только к глобальным переменным нет вопросов.

И нет ничего плохого в написании кода в обычном блокноте или даже в редакторе OpenOS. Мазохизм, конечно, но есть любители, сделавшие свой выбор осознанно.

  • Like 1

Поделиться комментарием


Ссылка на комментарий

предпоследний пункт, плохо ошибки выявляли :D
"Способы выявления ошибка"

Поделиться комментарием


Ссылка на комментарий

Кверти, посмотрел твои исходники, в принципе пишешь неплохо и красиво.

Но мне кажется ты поторопился с советами.

 

1, 3: Высосано из пальца. Я такого еще не видел, да и проблемы у новичков куда больше чем 1 0 или сравнение. Выигрыш памяти крошечный.

2, 4: Посмотри на код ESC - да там можно матершиную сказку про медведЕй найти. Но при этом код рабочий, и идеи реализовываются крутые. Ты придираешься зазря.

 

5: Ну, тут всё верно, глобальные переменные - зло.

 

Но всё равно, всё это ничтожно по сравнению с отсутствием форматирования и отступов, самоповторением и нелинейностью (по двадцать вложенных блоков aka "лесенка").

Булева - по англ. boolean это в честь какого-то математика назвали. Как и например название языка Pascal

Поделиться комментарием


Ссылка на комментарий

Булева - по англ. boolean это в честь какого-то математика назвали. Как и например название языка Pascal

Это и так все знают. Булева алгебра проходится не только у программистов, но и по электротехническим специальностям. Там есть логические элементы. А в программирование - логические операторы.

 

Тема настолько простая и понятная, что как-то стыдно обсуждать её. А тем более писать банальные вещи, что это названо в честь учёного.

Поделиться комментарием


Ссылка на комментарий

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
×