php - operadores - ¿Bitwise Flags abandonado?
php operador logico or (9)
"Plenty" es bastante genérico, ¡queremos nombres! ;-)
En serio, vengo del lenguaje ensamblador y C, y soy bastante competente en operaciones bit a bit. Pero no los usaría para reemplazar, digamos 10 booleanos no relacionados en una clase con banderas binarias en un entero ... ¡A menos, tal vez, tengo millones de ejemplares de esta clase!
Si tuviera que manipular mucha instancia de booleanos, usaría alguna clase de bitset para optimizar y abstraer estas matrices de bits.
Ahora, la manipulación de bits fu es casi obligatoria en la programación, si desea acceder a los componentes de los valores RGB [A], si desea llamar a algunas API (incluso si eso es solo ORing un número de indicadores con nombre), etc.
En resumen, no usaré eso en cada proyecto que haga, pero no puedes ignorar cómo hacerlo (un poco como expresiones regulares ...).
Me he dado cuenta de que un montón de proyectos de código abierto ya no usan banderas BITWISE, incluso si es totalmente compatible con el entorno de programación común para web (php / Mysql). ¿Es una "práctica perdida" para algún problema efectivo, o simplemente es que muchos programadores de php no saben cómo manejar este tipo de implementación?
Nada demasiado importante, solo muy curioso :) gracias a todos ustedes
En la actualidad, muchos programadores parecen tener la cabeza llena del conocimiento suficiente para descifrar el código de fuerza bruta y luego enviarlos a la fuerza de trabajo sin que se les enseñe lo que significan palabras como "bitwise".
Es un arte moribundo, te digo ...
Las operaciones de bit a bit no se limitan a conservar la memoria. Son realmente útiles para escribir código claro. ¿Qué preferirías ver?
OpenFile("...", true, false)
o
OpenFile("...", writeonly | append)
Es un ejemplo absurdo / trivial, pero entiendes la idea.
Los campos de bits son muy útiles si tiene requisitos muy apretados de memoria y velocidad, o cuando hace una programación de hardware de bajo nivel.
A menos que esté haciendo una programación integrada o algo similar, no los necesita. Existen mecanismos mucho más legibles, potentes y extensibles para realizar la misma tarea. Por ejemplo, EnumSets de Java.
Esperaría que un buen programador los conozca y no los use :-p
Sacaré mi cuello y diré que cada posición técnica requiere una buena comprensión de las operaciones a nivel de bit.
Y tengo una anécdota que trata indirectamente el tema.
Enero de 2007 Estuve en Cochin, India, reclutando personal de desarrollo permanente. Como no participé en la selección preliminar de candidatos, no tenía idea qué estándar esperar, por lo que preparé una variedad de preguntas y temas que iban desde la comprensión simple de binarios y hexadecimales hasta la arquitectura, el diseño y la gestión de proyectos.
Cuando discutí mi enfoque con el hombre indio de recursos humanos me regañaron (suavemente) por lanzar demasiado bajo. Dejó en claro que mis preguntas sobre el maleficio posiblemente se interpretarían como un insulto a la experiencia o educación de los candidatos.
Pero mi experiencia de entrevistar a cientos de candidatos en el Reino Unido me había convencido de que no era posible lanzar demasiado bajo. Mi opinión era y sigue siendo que si resulta obvio que un candidato está bien calificado, entonces es simple y fácil ajustar el nivel de discusión. Nunca he tenido a nadie expresar sentimientos de insultado, por el contrario, creo que un candidato bien calificado puede sentirse aliviado en un comienzo volador de la entrevista. También ayuda a romper el hielo y construir una relación necesaria para una entrevista significativa. Por otro lado, los candidatos no calificados suelen caer en estos obstáculos más bajos.
Pero no queriendo ignorar por completo los consejos locales, decidí cuidadosamente incluir mis temas básicos de entrevista, y estaba bastante preparado para abandonarlos si no funcionaban.
A medida que avanzaban las entrevistas, me alegré de haber comenzado en ese nivel. No ofendió a nadie, y los candidatos inadecuados se identificaron fácilmente.
Esto no quiere decir que espero que los candidatos se enfrenten día a día con un poco de trabajo, pero sea cual sea el idioma, una comprensión sólida de los fundamentos de la programación es esencial. Incluso los desarrolladores en los niveles superiores de abstracción están expuestos al hexadecimal de forma regular (valores RGB, por ejemplo). Compartir cosas que encuentres en la red solo te ayudará en la medida en que todo funcione perfectamente a la primera.
Pero para los desarrolladores que comenzaron en los últimos cinco años, creo que es muy fácil pasar por alto los fundamentos, mimados por IDE bien intencionados y el meme de la programación "sin código". Las pantallas spash de instalación de Visual Studio se jactan de desarrollar sin escribir código. De hecho, ¿Visual Studio corroe la mente ?
Si tiene una aplicación ya compleja, ¿por qué la haría más compleja utilizando banderas bit a bit? Personalmente, no usaría estas banderas amables si no hubiera más aspectos positivos que simplemente ser genial. Y sin experiencia, escribirlo es bastante fácil, ajustarlo más tarde es más difícil, y mucho menos si no lo ha escrito usted mismo.
Ah, y para que conste, sé cómo usarlos.
Siempre tienen un lugar para almacenar muchas banderas booleanas en una pequeña cantidad de espacio;
Solo piense si tiene 32 banderas (por ejemplo); Podrías almacenarlos todos en un "entero largo" y simplemente usar hasta 4 bytes. Ahora imagina que elegiste usar un largo para cada bandera (solo porque el código es más fácil de mantener; ahora tienes que lidiar con 128 bytes.
Mis antecedentes son principalmente C / C ++, así que me criaron en ellos, así que definitivamente los uso en todos los idiomas que uso; pero estoy de acuerdo; Los programadores novatos tienden a no preocuparse, a todos estos recuerdos, ¿a quién le importa?
Todavía utilizo operadores bit a bit, aunque como mi principal idioma de elección (y profesionalmente) es C #, a menudo uso las enumeraciones Flag para ello :) Pero sí, creo que muchas personas que codifican en cosas como PHP son autodidactas, y no lo hacen saber sobre operaciones bit a bit o los usos de ellas.
Siendo yo mismo autodidacta, no sabía mucho sobre ellos hasta que comencé a escribir el código C y C ++. Ahora los uso donde tienen sentido :)
Fuera de la programación integrada, donde la gestión de la memoria es fundamental, su costo supera su valor mínimo. En particular, la consulta de columnas db que contienen indicadores bit a bit produce SQL críptico que requiere referenciar el código de la aplicación solo para determinar a qué valor hace referencia cada operación bit a bit.
WHERE (ISNULL(flags, 0) & 4096 = 0 -- What does this bit refer to?
Si tener que consultar su DB de esta manera no le asusta, debería hacerlo.