Это если включить видимость невидимых символов. Но само по себе наличие в языке невидимых символов, которые являются частью синтаксиса, довольно спорно.
Отступы не есть абстрактный программный тип, который может быть осмысленен на языковом уровне. Они даже не видны. Это глубочайшее заблуждение. Питонисты это извращенцы. Настоящие. Закоренелые. Когда то это им боком выйдет..
Так как, типZooData в данном случае теперь один на весь модуль не имеет смысла передавать его в функции по указателю. Хоанить его лучше в секции данных в статической памяти. Ведь нужен всего 1 экземпляр данной структуры. При этом большинсиво функций обработчиков можно заставить работать тодько с элементарными скалярными типами, что без дженериков позволит им работать с разными типами структур. Например функцию update_positions() можно переписать следующим образом:
// функция движения
void update_positions(int *box, int * y, int count ) { // Процессор ликует: данные лежат в памяти ровной линией. // Пока он считает x[0], контроллер памяти уже подтягивает x[1...15] в кэш. for (int i = 0; i < count; i++) { x[i] += 1.0f; y[i] += 1.0f; }}
Для меня красивый код это прежде всего эффективный и алгоритмически-верный код. У программистов есть своя профессиональная болезнь, от которой трудно излечиться — графоманство. Программист-графоман это угроза всей IT-индустрии, так как такие как он заботятся о красоте написанного кода, о том как выглядит он в редакторе, а не о том, как он работает в реальной жизни. Потребитель не смотрит ваш код, он смотрит на конечный результат. И если ваш красивый код убивает Боинг и всех пассажиров, то от такой «красоты» лучше держаться подальше…
Это если включить видимость невидимых символов. Но само по себе наличие в языке невидимых символов, которые являются частью синтаксиса, довольно спорно.
Отступы не есть абстрактный программный тип, который может быть осмысленен на языковом уровне. Они даже не видны. Это глубочайшее заблуждение. Питонисты это извращенцы. Настоящие. Закоренелые. Когда то это им боком выйдет..
Только умоляю назови этот язык не рапирой. Например питон-рубль-дубль
Индексирование с 1 это же прекрасно!
Так как, тип
ZooData в данном случае теперь один на весь модуль не имеет смысла передавать его в функции по указателю. Хоанить его лучше в секции данных в статической памяти. Ведь нужен всего 1 экземпляр данной структуры. При этом большинсиво функций обработчиков можно заставить работать тодько с элементарными скалярными типами, что без дженериков позволит им работать с разными типами структур. Например функцию update_positions() можно переписать следующим образом:// функция движенияvoidupdate_positions(int*box, int* y, int count ) { // Процессор ликует: данные лежат в памяти ровной линией. // Пока он считает x[0], контроллер памяти уже подтягивает x[1...15] в кэш.for(inti = 0; i < count; i++) { x[i] += 1.0f; y[i] += 1.0f; }}Вызов: update_positions(zoo->x, zoo->y, zoo->count);