ГлавнаяБлогКарты Warcraft 3Гайды для первой ДотыГайды для Доты 2 [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: XOPYC, russsix  
Тема для тупого флуда
Дата: Вторник, 23.06.2020, 16:10 | Сообщение # 3811
Admin
Администраторы
Сообщений: 15297
Награды: 43
Репутация: 188
Цитата Salamandr ()
это управляется табуляцией или пробелами

то есть лишний пробел случайно поставил, не заметил, и у тебя программа уже делает совершенно не то, что нужно?


Warcraft 3 - это уже легенда
WC3 - это мини-легенда
Дота - это альтернативный путь развития варкрафта
 
Дата: Вторник, 23.06.2020, 16:38 | Сообщение # 3812
Генералиссимус
Проверенные
Сообщений: 2234
Награды: 3
Репутация: 37
В большинстве случаев программа просто не запустится и выдаст ошибку табуляции, т.к. интерпретатор проверяет эти вещи, чтобы пробелы стояли ровно. Но если в конце цикла ты вместо того, чтобы вернуть табуляцию на предыдущий уровень, продолжишь как бы писать код на том же уровне, что и тело цикла, то все эти действия будут выполняться не после завершения цикла, а при каждой итерации. В общем это дело даже не привычки как по мне, а первоначального понимания принципа работы такого синтаксиса.

На максимально простом и абстрактном примере. В таком коде:
Код

connection = websocket.connect(uri)
for x in range(10):
    text = random_message_text()
    connection.send(text)
connection.close()

Можно допустить такую ошибку, и сообщение по вебсокету отправится только одно вместо 10, т.к. соединение закроется при первой итерации, а не после выполнения цикла:
Код

connection = websocket.connect(uri)
for x in range(10):
    text = random_message_text()
    connection.send(text)
    connection.close()

Другие вариации:
[cut=Примеры]
Код

connection = websocket.connect(uri)
for x in range(10):
   text = random_message_text()
    connection.send(text)
connection.close()

Код

connection = websocket.connect(uri)
for x in range(10):
    text = random_message_text()
  connection.send(text)
connection.close()

Код

connection = websocket.connect(uri)
for x in range(10):
    text = random_message_text()
    connection.send(text)
  connection.close()

[/cut]
Интерпретатор не пропустит и выдаст ошибку, т.к. отступы должны быть ровными. Они в этом плане ничуть не менее строгие чем скобки, просто со своими правилами

Добавлено (23.06.2020, 16:43)
---------------------------------------------
Твой пример как-то так будет выглядеть:

Код

for j in range(4):
    for i in range(4):
        tft.setCursor(22 + (60*i), 100 + (60*j))
        tft.setTextSize(3)
        tft.setTextColor(WHITE)
        tft.println(symbol[j][i])


Тут тоже шаг влево, шаг вправо - либо ошибку интерпретатор выкинет, либо неправильно отработает, если последние строки у тебя как-то так переместятся:

Код

for j in range(4):
    for i in range(4):
        tft.setCursor(22 + (60*i), 100 + (60*j))
        tft.setTextSize(3)
    tft.setTextColor(WHITE)
tft.println(symbol[j][i])


Сообщение отредактировал Salamandr - Вторник, 23.06.2020, 16:44
 
Дата: Среда, 24.06.2020, 13:54 | Сообщение # 3813
Генералиссимус
Модераторы
Сообщений: 13226
Награды: 22
Репутация: 141
Собственно не вижу проблем в подобном коде, вернее сказать, учитывая, что пишу на другом языке, да и все остальные которые изучал так же были со скобками, хотя банальный if можно записать и без скобок, если там всего одно действие, типа:
Код
if(x = 2)
   a = b
else
   a = c


Ну это я условно =)

Так вот я к тому, что подобные записи на Питоне не кажутся мне сложными или не понятными. По сути нормально оформленный код на других языках будет выглядеть абсолютно так же, только ещё будут скобки, вот и всё =)


это Ксопик!
 
Дата: Среда, 24.06.2020, 14:04 | Сообщение # 3814
Admin
Администраторы
Сообщений: 15297
Награды: 43
Репутация: 188
Просто если несколько уровней вложений (до 4-5 у меня бывало) мне кажется с этими отступами замучаешься их отслеживать. А в более менее прямолинейных программах может быть это жизнеспособный подход

Warcraft 3 - это уже легенда
WC3 - это мини-легенда
Дота - это альтернативный путь развития варкрафта
 
Дата: Среда, 24.06.2020, 14:13 | Сообщение # 3815
Генералиссимус
Проверенные
Сообщений: 2234
Награды: 3
Репутация: 37
На самом деле считается хорошим тоном в стиле программирования не делать множество вложенных отступов и циклов. Если появляется много вложенных циклов, то обычно код можно переписать в таком стиле, чтобы смотрелось это человекопонятно - разбить код по функциям, например, и т.д.

Добавлено (24.06.2020, 14:15)
---------------------------------------------
Так-то ты и в коде со скобками делаешь разные отступы. Так же есть опасность не в том месте поставить скобку, и всё, код работает не так, как надо))

 
Дата: Среда, 24.06.2020, 20:50 | Сообщение # 3816
Admin
Администраторы
Сообщений: 15297
Награды: 43
Репутация: 188
Цитата Salamandr ()
чтобы смотрелось это человекопонятно - разбить код по функциям, например, и т.д.

это не всегда удобно, когда пишешь функцию для какого-нибудь редкого уникального расчета его обычно лучше объединить в одну функцию

Цитата Salamandr ()
Так же есть опасность не в том месте поставить скобку, и всё, код работает не так, как надо))

не, скобки у программистов "в крови", а вот отступы вместо них - это чужеродный искусственный элемент ))


Warcraft 3 - это уже легенда
WC3 - это мини-легенда
Дота - это альтернативный путь развития варкрафта
 
Дата: Четверг, 25.06.2020, 14:41 | Сообщение # 3817
Генералиссимус
Модераторы
Сообщений: 13226
Награды: 22
Репутация: 141
Цитата Admin ()
не, скобки у программистов "в крови", а вот отступы вместо них - это чужеродный искусственный элемент ))

Если не будет отступов, то код будет не читаемый, даже со скобками. Ещё когда у меня была книжка по Делфи, да и что-то постарее где-то находил, в любом листинге кода были отступы.
Вот войну про то, что отступы должны быть либо из 4ёх пробелов либо из одного таба, это знаю. А что отступы не нужны вообще, какая-то наркомания =)
Либо ещё одно, это когда открывающая фигурная скобка тела if'а ставится на той же строке, что и условия, либо переносится на следующую =) Это ещё один вечный спор =)

Цитата Admin ()
это не всегда удобно, когда пишешь функцию для какого-нибудь редкого уникального расчета его обычно лучше объединить в одну функцию

Есть такая штука, как обращение к базе, и можно этот вызов закинуть в какой нибудь while, потом в foreach, потом ещё куда-то и всё это новая и новая вложенность.
Ну и нагрузка на базу соответственно. Вместо 1кк обращений к базе, нужно собрать инфу в один массив и нормально составленным запросом один раз обратиться к базе, получив всё нужное. В случаях, когда структура базы идиотская и такое не прокатывает... ну тут уже ничего не попишешь.
Ну и думаю Саламандр говорит не про 3-5 вложенностей, а про 10-20, а то и больше. Если такая матрёшка получается, то явно что-то не правильно продуманно. И да, это не про 10 ифов, которые стоят друг за другом, т.к. находятся на одном уровне вложенности =)

Цитата Salamandr ()
Так же есть опасность не в том месте поставить скобку, и всё, код работает не так, как надо))

Вот кстати да =) Но тут что так, что эдак, везде можно накосячит. Глупые ошибки перестаёшь делать со временем =) А если и возникают, то чаще из-за усталости, когда над одной задачей просидел уже 12 часов =) Я так в js вместо alert("Текст"); писал alarm("Текст"); и не понимал, почему такой функции типа нет =) Если что первая выводит окошко в браузере с сообщением, а второй не существует =)


это Ксопик!
 
Дата: Четверг, 25.06.2020, 16:31 | Сообщение # 3818
Admin
Администраторы
Сообщений: 15297
Награды: 43
Репутация: 188
Цитата XOPYC ()
Если не будет отступов, то код будет не читаемый, даже со скобками

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

Цитата XOPYC ()
нужно собрать инфу в один массив и нормально составленным запросом один раз обратиться к базе

в той программе, которую я 5 лет писал на работе, это все не нужно. Она узко специализированная расчетная, аналогов нет


Warcraft 3 - это уже легенда
WC3 - это мини-легенда
Дота - это альтернативный путь развития варкрафта
 
Дата: Четверг, 25.06.2020, 17:55 | Сообщение # 3819
Генералиссимус
Модераторы
Сообщений: 13226
Награды: 22
Репутация: 141
Цитата Admin ()
отступы, конечно, нужны для читаемости кода, но одно дело когда ставишь их по собственному желанию, а другое - когда это обязаловка

Это не обязаловка, а логика =) Вероятно тебе же когда-то придётся что-то поправить/добавить, а если этот код не читаемый, то будет крайне сложно в нём разобраться.
Более того, современные IDE уже давно сами всё подставляют так, чтобы было логично и понятно. Так что сложности могут возникнуть разве что в блокноте =)

Цитата Admin ()
в той программе, которую я 5 лет писал на работе, это все не нужно. Она узко специализированная расчетная, аналогов нет

Ну я привёл пример, где излишняя вложенность это плохо. Да ну пускай это будет не база, но у тебя к примеру есть массив с 1 миллионом значений. Ты его перебираешь в цикле, пока не кончатся элементы.
Внутри этого цикла ты к примеру сравниваешь его показатели с другим массивом, у которого тоже 1 миллион значений. Получается 1 000 000 000 000 операций = ) А если там будет ещё массивчик с 10ю хотя бы элементами, который нужно будет сравнить с всеми значениями внутри второго массива, то умнож кол-во операций на 10 =)
И такие задачи вполне могут быть =) Или реализация где-то, всякое бывает =)


это Ксопик!
 
Дата: Четверг, 25.06.2020, 20:37 | Сообщение # 3820
Генералиссимус
Проверенные
Сообщений: 2234
Награды: 3
Репутация: 37
Цитата XOPYC ()
Я так в js вместо alert("Текст"); писал alarm("Текст"); и не понимал, почему такой функции типа нет =) Если что первая выводит окошко в браузере с сообщением, а второй не существует =)

Прикол. Да, бывает периодически подобное. Возможно даже, тоже писал alarm как-то, уже не помню :Q

Цитата Admin ()
отступы, конечно, нужны для читаемости кода, но одно дело когда ставишь их по собственному желанию, а другое - когда это обязаловка

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

Я просто работая на Питоне почти никогда не встречаю каких-то умопомрачительных вложенных отступов, когда код уходит за экран. Такое бывает только в объективно очень плохом коде, обычно написанном впопыхах и\или новичком
Общепринято стараться писать функции не больше 50 строк и избегать множественных вложенных циклов, по крайней мере в рамках одной функции


Сообщение отредактировал Salamandr - Четверг, 25.06.2020, 20:38
 
Поиск: