Recuerdo haber leído en algún lugar que noty !se evalúan de manera diferente, y no puedo encontrarlo en la documentación. ¿Son sinónimos?
ruby
boolean-logic
0112
fuente
fuente

Respuestas:
Son casi sinónimos, pero no del todo. La diferencia es que
!tiene una precedencia mayor quenot, mucho como&&y||son de mayor precedencia queandyor.!tiene la precedencia más alta de todos los operadores, ynotuna de las más bajas, puede encontrar la tabla completa en los documentos de Ruby .Como ejemplo, considere:
En el primer ejemplo,
!tiene la mayor prioridad, por lo que efectivamente está diciendofalse && false.En el segundo ejemplo,
nottiene una precedencia menor quetrue && false, por lo que "cambió" elfalsedetrue && falseatrue.La pauta general parece ser que debe seguir
!, a menos que tenga una razón específica para usarlanot.!en Ruby se comporta igual que la mayoría de los otros lenguajes, y es "menos sorprendente" quenot.fuente
unlessen ese caso?unlesssimplemente no es realmente favorecido en el mundo del rubí. El consenso general es que se interpone cuando!funciona igual de bien en la mayoría de las situaciones. Estoy seguro de que hay casos en los que a menos que sea más expresivo, pero me mantengo alejado.unlessesté desfavorecido. Lo más cercano que tenemos a un consenso dice lo contrario.notpuede ser. En Python, a veces asigno valores booleanos a variables para facilitar la lectura de las declaraciones if. Eso podría significar usar el patrónx = not y, donde y es algo complejo. En Ruby,x = !yfunciona, perox = not yconsiguesyntax error, unexpected tIDENTIFIER, expecting '('. El orden de prioridad significa esto necesita paréntesis alrededor de la derecha de la op asignación a un trabajo:x = (not y).Una forma sencilla de entender al
notoperador es considerarnot true && falsecomo equivalente a!(true && false)fuente