Я заметил, что много проектов с открытым исходным кодом больше не использует флаги BITWISE, даже если они полностью поддерживаются программным окружением, общим для Интернета (php / Mysql). Это «потерянная практика» для какой-то эффективной проблемы, или просто многие программисты php не знают, как справиться с этим типом реализации?
Ничего слишком важного, просто очень любопытно 🙂 спасибо вам всем
Я выдержу свою шею и скажу, что каждое техническое положение требует разумного понимания побитовых операций.
И у меня есть анекдот, который косвенно затрагивает тему.
Январь 2007 года Я был в Кочине, Индия, набирал сотрудников для постоянного развития. Поскольку я не участвовал в предварительном отборе кандидатов, я понятия не имел, какой стандарт ожидать, поэтому я подготовил ряд вопросов и тем, начиная от простого понимания бинарных и шестнадцатеричных до архитектуры, дизайна и управления проектами.
Когда я обсуждал свой подход с индийским парнем HR, я (мягко) упрекнул за качку слишком низко. Он дал понять, что мои вопросы об гексах, возможно, будут истолковываться как оскорбление опыта или образования кандидатов.
Но мой опыт опроса сотен кандидатов в Великобритании зафиксировал во мне убеждение в том, что невозможно слишком низко поставить. Мое мнение было и остается тем, что, если станет очевидным, кандидат хорошо подготовлен, тогда просто и легко настроить уровень обсуждения. Я никогда не слышал, чтобы меня оскорбляли, напротив, я думаю, что квалифицированный кандидат может почувствовать облегчение при начале полета на собеседование. Это также помогает сломать лед и построить раппорт, необходимый для содержательного интервью. С другой стороны, неквалифицированные кандидаты обычно попадают в эти нижние барьеры.
Но, не желая полностью игнорировать местные советы, я с осторожностью решил включить мои основные темы интервью и был вполне готов отказаться от них, если они не сработали.
По мере того как интервью прогрессировали, я был рад, что начал с этого уровня. Он никого не обидел, и неподходящие кандидаты были легко идентифицированы.
Это не означает, что я ожидаю, что кандидаты будут ежедневно биться с каждым днем, но независимо от того, какой язык необходим для правильного понимания основ программирования. Даже разработчики на более высоких уровнях абстракции подвергаются воздействию гексана на регулярной основе (например, значения RGB). Попугай, который вы найдете в сети, поможет только в том случае, если все будет работать в первый раз.
Но для начинающих разработчиков за последние пять лет я считаю, что слишком легко замалчивать основы, увлеченные хорошо продуманными IDE и мемом «без кодового» программирования. Скриншоты для установки Visual Studio могут похвастаться развитием без написания кода. Действительно, Visual Studio гниет разум ?
Многие программисты в наши дни, похоже, просто имеют свои головы, наполненные достаточным количеством знаний для кодирования грубой силы, а затем отправляются в рабочую силу, не изучая, какие слова «поразрядные» даже означают.
Я умираю, я говорю вам …
Побитовые операции – это не только сохранение памяти. Они действительно полезны для написания четкого кода. Что бы вы предпочли?
OpenFile("...", true, false)
или
OpenFile("...", writeonly | append)
Это своего рода бессмысленный / тривиальный пример, но вы получаете идею.
Если у вас уже сложное приложение, почему бы вам сделать его более сложным с помощью побитовых флагов. Я лично не использовал бы эти флаги, если бы не было больше проблем, а потом просто было бы круто. И из опыта, писать это довольно легко, корректируя его позже, становится более сложным, не говоря уже о том, что вы сами не записали его.
О, и для записи я знаю, как их использовать.
Вне встроенного программирования, где управление памятью имеет решающее значение, их стоимость превосходит их минимальную ценность. В частности, запрос столбцов db, содержащих побитовые флаги, создает критический SQL, который требует ссылки на код приложения, чтобы определить, какое значение имеет каждая побитовая операция.
WHERE (ISNULL(flags, 0) & 4096 = 0 -- What does this bit refer to?
Если вам нужно запросить свою БД, это не пугает вас, это должно.
Битвы очень полезны, если у вас очень жесткие требования к памяти и скорости, или при выполнении низкоуровневого аппаратного программирования.
Если вы не выполняете встроенное программирование или что-то подобное, вам они не нужны. Существуют гораздо более читаемые, мощные, расширяемые механизмы для выполнения одной и той же задачи. Например, EnumSets от Java.
Я бы ожидал, что хороший программист узнает их и не будет использовать их: -p
«Много» – довольно общий, нам нужны имена! 😉
Серьезно, я исхожу из ассемблера и C, и я достаточно разбираюсь в побитовых операциях. Но я бы не использовал их для замены, скажем, 10 несвязанных логических элементов в классе с бинарными флагами в целочисленном … Если, может быть, у меня есть миллионы экземпляров этого класса!
Должен ли я манипулировать множеством экземпляров булевых элементов, я бы использовал некоторый класс битов, чтобы оптимизировать и абстрагировать эти массивы бит.
Теперь бит-манипуляция fu почти обязательна в программировании, если вы хотите получить доступ к компонентам значений RGB [A], если вы хотите вызвать некоторые API (даже если это просто ORing для нескольких названных флагов) и т. Д.
Короче говоря, я не буду использовать это в каждом проекте, который я делаю, но вы не можете игнорировать, как это сделать (немного похожее на регулярные выражения …).
Я по-прежнему использую побитовые операторы, хотя, поскольку мой основной язык выбора (и профессионально) – это C #, я часто использую перечисления Flag для него 🙂 Но да, я думаю, что многие люди, которые кодируют такие вещи, как PHP, сами учатся, а не знать о побитовых операциях или их использовании.
Будучи самоучкой, я не знал о них до тех пор, пока не начал писать код на C и C ++. Теперь я использую их там, где они имеют смысл 🙂
У них всегда есть место для хранения большого количества булевых флагов на небольшом пространстве;
Подумайте, есть ли у вас 32 флага (например); Вы можете сохранить их все в одном «длинном целом» и просто использовать до 4 байтов. Теперь представьте, что вы решили использовать длинный для каждого флага (просто потому, что код проще в обслуживании – теперь у вас есть 128 байт.
Мой фон – это прежде всего C / C ++, поэтому я был воспитан на них, поэтому я определенно использую их на всех языках, которые я использую; но я согласен; программисты-новички, как правило, даже не заботятся – вся эта память лежит вокруг – кого это волнует?