Пример утрирован для наглядности.
Вот другой пример: у вас есть мощная библиотека распознавания символов написанных от руки. Но вам нужны только цифры. Разработчик библиотеки об этом не подумал.
Современные языки программирования успешно убирают неиспользуемый функционал из библиотек, предназначенных для встраивания в .exe, если это реализовано в виде раздельных функций:
Библиотека: нарисовать_фигуры.
Функция "нарисовать_треугольник".
Функция "нарисовать_пентаграмму".
Код, написанный программистом:
бла-бла-бла
нарисовать_треугольник
бла-бла-бла
Результат: внутри exe файла не будет функции «нарисовать_пентаграмму».
Но что если дело обстоит так:
Библиотека: нарисовать_фигуры.
Функция "нарисовать_что-то_острое" (номер_фигуры: от 1 до 100500).
...
Если номер_фигуры = 30451, нарисовать треугольник
Если номер_фигуры = 30452, нарисовать пентаграмму
Если номер_фигуры = 30453, нарисовать кандибобрика
...
Согласен. Предложите, как сделать правильно. При этом не забудьте, что возможно и такое значение: «номера есть, и они пусты», отличающееся от «номеров нет». (По аналогии с чисто белыми транспарантами на политических митингах).
Меня больше всего интересует, какой из перечисленных разных смыслов вы придадите Null-у.
Ок, в википедии оба варианта: «поле, не содержащее никакого значения» и «неизвестность информации».
Грубо говоря, допустим, есть 100 автомобилей и мы ходим вокруг запертой стоянки и переписываем их номера глядя через забор. Переписали номера 98 автомобилей, на одном автомибиле номеров нет, и один так поставлен что номеров увидеть нельзя. Значит, имеем: 98 значений, 1 Null в смысле описанном вами, 1 Null в смысле описанном мной.
Можно ли сказать, что у Васи и Пети одинаковый цвет волос, если мы их никогда не видели, и фотографий нет? (мой вариант Null) — нельзя.
Можно ли сказать, что у Васи и Пети одинаковый цвет волос, если вот они перед нами, и они оба лысые? (ваш вариант Null) — я бы сказал что да, поэтому в вашем случае Null=Null — истина.
Допускаю что в языке на котором вы пишете — да, но не уверен что это хорошо. Чем толше прослойка абстракции между мной и WinAPI тем сложнее добиться скорости.
Правильный разработчик «устанавливает алтари там, где кожа земли истончается» (De Vermis Misterius)
Число монстров на локации не так велико, обычно от 30 до 300. При смерти* одного и затем добавлении нового можно просто перебрать массив в поисках дырочки.
*смерть монстра с точки зрения кода наступает позже, чем с точки зрения игрока.
P.S. Кто работал с динамическими массивами, знает, что лучше увеличивать массив сразу на 30-100%, а реальное количество держать в переменной. Применительно к монстрам, я выделял бы сразу 2000 указателей. Массив не статический так как никакого фиксированного числа может не хватить — там вроде бы был монстр, генерящий какодемонов.
Однопользовательский вариант:
Монстры это элементы глобальной переменной — динамического массива. У каждого есть индекс. Значит, в каждом монстре надо писать индекс того, кого он атакует; -1 — никого, -2 — игрока.
Боюсь что только с новичками так делают. Более опытные товарищи сидят на своих темах, которыми занимаются довольно долго и в которые начальство вникает меньше, и они минуя начальство общаются с заказчиками.
Нет, веб-интерфейс не менее важен. Просто начальство хочет чтобы программист в проекте был универсальный солдат. Поэтому его как дерево пересаживают с места на место, пока не пустит в какой-нибудь теме слишком большие корни.
И да, это идиотизм. Образованных от чтения таких вот статей.
>> Как раз новичкам нужно, по-моему, давать самые разные задачи (под их общий уровень, конечно).
Вот вы программист, вы пишете веб-интерфейс личного кабинета клиентов.
И тут задача: прервись, ты молодец, а теперь — «Необходимо доработать аннуляцию для услуги бронирования». А то, в чём ты досконально разобрался и изящно спланировал как дальше делать, поручим Васе, передай ему все дела.
память под переменную не выделена, но переменная как GlobalVar уже существует (например, ей можно присвоить null).
Вы путаете три разных понятия, которые не стоит путать.
1) Переменная может быть указателем, ссылающимся на область ОЗУ, где хранятся данные. Тогда память (не под переменную!!! а под данные на которые она смотрит!!!) не выделена, и поэтому в переменной хранится nil (а не Null!!!).
2) Переменная может допускать значение Null. Например, в Delphi это класс переменных variant, а в СУБД — все типы столбцов, которым не задан атрибут Not Null. В этом случае в переменной может храниться Null, как значение. В теории БД, Null должно означать: значение есть, но мы не знаем его. (Из за такой трактовки, условие Null=Null считается равным False.) В практике не так, например для строчных ORACLE переменных, Null — пустая строка.
3) Переменная может ещё не существовать. Например, в ORACLE возникнет ошибка при чтении из Sequence, которой ещё не создано.
Почему же. Это утверждение писал программист, работавший в тех и этих проектах, и сравнивающий свою собственную производительность.
И это крайне распространённое утверждение таких программистов.
>> Стандарт компании — Windows. Выбей для своих Linux или Mac.
Не надо.
>> Поэтому старайся делать ротацию задач. Да, Вася сделает её медленнее и хуже, чем Петя, но зато у Васи появится экспертиза и ему будет интересно ковыряться в чём-то новом — двойная польза.
Вася будет вас материть. Но вы этого не услышите. Никогда не делайте таким образом, особенно в отношении сотрудников работающих в компании первые 7-8 месяцев.
>> Закончился рабочий день — не доставай людей и забудь про работу сам.
Можно писать в мессенджер, ответят или сегодня или завтра.
Но вообще, лучше так, чем жесткий график.
>> Отпуск — неприкосновенное время. Если у кого-то появляется необходимость каждый день названивать человеку в отпуске и тем более просить его поработать — ты сделал что-то неправильно, нужно исправлять.
Да. Просто если есть такая горящая необходимость, лучше попросить не выходить в отпуск именно сейчас. Отпустили в отпуск — да, конечно нельзя тревожить, человек отдыхает.
Так в том-то и дело, что она [переменная «Я», со свойствами пьян(да/нет) и т.д.] не глобальная. Она локальная для Тусовка (там создается, там и умирает).
Правда? Подобная мысль была у Пелевина (Арлекин не существует за пределами карнавала).
А если в Procedure ДавайДавай! версии 2.0, помимо Я, реализуется взаимодействие с другими восхитительными объектами, то надо менять список параметров процедуры?
Вот другой пример: у вас есть мощная библиотека распознавания символов написанных от руки. Но вам нужны только цифры. Разработчик библиотеки об этом не подумал.
И разработчики SQL свой код ещё как оптимизируют.
Библиотека: нарисовать_фигуры.
Код, написанный программистом:
Результат: внутри exe файла не будет функции «нарисовать_пентаграмму».
Но что если дело обстоит так:
Библиотека: нарисовать_фигуры.
Код, написанный программистом:
то результат: внутри exe файла будет ВСЁ.
Вот об этом надо подумать разработчикам компиляторов…
Меня больше всего интересует, какой из перечисленных разных смыслов вы придадите Null-у.
Грубо говоря, допустим, есть 100 автомобилей и мы ходим вокруг запертой стоянки и переписываем их номера глядя через забор. Переписали номера 98 автомобилей, на одном автомибиле номеров нет, и один так поставлен что номеров увидеть нельзя. Значит, имеем: 98 значений, 1 Null в смысле описанном вами, 1 Null в смысле описанном мной.
Можно ли сказать, что у Васи и Пети одинаковый цвет волос, если мы их никогда не видели, и фотографий нет? (мой вариант Null) — нельзя.
Можно ли сказать, что у Васи и Пети одинаковый цвет волос, если вот они перед нами, и они оба лысые? (ваш вариант Null) — я бы сказал что да, поэтому в вашем случае Null=Null — истина.
Ну ок, представьте что мы ищем НАИЛУЧШИЙ вариант.
Критерий оценки такой: БЫТЬ МЕНЬШЕ СЛОНА.
Нет, куда проще завести, например, таблицу Корма x Породы кошек, с ячейками типа Boolean, и встроить в код как константу-массив.
Правильный разработчик «устанавливает алтари там, где кожа земли истончается» (De Vermis Misterius)
На локации. Игра не обсчитывает все локации одновременно. Для того они и существуют чтобы одновременно их не рассчитывать.
>> И не забыть обойти все места, которые ссылаются на эту «дырочку» и их поправить.
Это надо делать при смерти-с-точки-зрения-игрока монстра.
>> Кто работал с нормальными динамическими масссивами знает, что массив это прячет за абстракцией.
И что он прячет?
*смерть монстра с точки зрения кода наступает позже, чем с точки зрения игрока.
P.S. Кто работал с динамическими массивами, знает, что лучше увеличивать массив сразу на 30-100%, а реальное количество держать в переменной. Применительно к монстрам, я выделял бы сразу 2000 указателей. Массив не статический так как никакого фиксированного числа может не хватить — там вроде бы был монстр, генерящий какодемонов.
Однопользовательский вариант:
Монстры это элементы глобальной переменной — динамического массива. У каждого есть индекс. Значит, в каждом монстре надо писать индекс того, кого он атакует; -1 — никого, -2 — игрока.
Многопользовательский: 0 — никого, -1,-2… — игрока 0,1,..., 1,2,… — монстра 0,1,…
Вот я и спросил у VolCh, вопрос предназначался ему. Но это шутки типа.
Нет, веб-интерфейс не менее важен. Просто начальство хочет чтобы программист в проекте был универсальный солдат. Поэтому его как дерево пересаживают с места на место, пока не пустит в какой-нибудь теме слишком большие корни.
И да, это идиотизм. Образованных от чтения таких вот статей.
Вот вы программист, вы пишете веб-интерфейс личного кабинета клиентов.
И тут задача: прервись, ты молодец, а теперь — «Необходимо доработать аннуляцию для услуги бронирования». А то, в чём ты досконально разобрался и изящно спланировал как дальше делать, поручим Васе, передай ему все дела.
КАКОГО??????? Начальники, зачем вы так делаете?
1) Переменная может быть указателем, ссылающимся на область ОЗУ, где хранятся данные. Тогда память (не под переменную!!! а под данные на которые она смотрит!!!) не выделена, и поэтому в переменной хранится nil (а не Null!!!).
2) Переменная может допускать значение Null. Например, в Delphi это класс переменных variant, а в СУБД — все типы столбцов, которым не задан атрибут Not Null. В этом случае в переменной может храниться Null, как значение. В теории БД, Null должно означать: значение есть, но мы не знаем его. (Из за такой трактовки, условие Null=Null считается равным False.) В практике не так, например для строчных ORACLE переменных, Null — пустая строка.
3) Переменная может ещё не существовать. Например, в ORACLE возникнет ошибка при чтении из Sequence, которой ещё не создано.
И это крайне распространённое утверждение таких программистов.
Не надо.
>> Поэтому старайся делать ротацию задач. Да, Вася сделает её медленнее и хуже, чем Петя, но зато у Васи появится экспертиза и ему будет интересно ковыряться в чём-то новом — двойная польза.
Вася будет вас материть. Но вы этого не услышите. Никогда не делайте таким образом, особенно в отношении сотрудников работающих в компании первые 7-8 месяцев.
>> Закончился рабочий день — не доставай людей и забудь про работу сам.
Можно писать в мессенджер, ответят или сегодня или завтра.
Но вообще, лучше так, чем жесткий график.
>> Отпуск — неприкосновенное время. Если у кого-то появляется необходимость каждый день названивать человеку в отпуске и тем более просить его поработать — ты сделал что-то неправильно, нужно исправлять.
Да. Просто если есть такая горящая необходимость, лучше попросить не выходить в отпуск именно сейчас. Отпустили в отпуск — да, конечно нельзя тревожить, человек отдыхает.
Правда? Подобная мысль была у Пелевина (Арлекин не существует за пределами карнавала).
А если в Procedure ДавайДавай! версии 2.0, помимо Я, реализуется взаимодействие с другими восхитительными объектами, то надо менять список параметров процедуры?
Вы видели только две процедуры. И даже если так, почему в будущем я не захочу узнать пьян я или нет, в другом месте кода?