swift - sport - ¿Diferencia entre "precondición" y "hacer valer" en rapidez?
swift sport (4)
condición previa
func precondition(condition: @autoclosure () -> Bool, _ message: @autoclosure () -> String = default, file: StaticString = default, line: UWord = default)
Verifique una condición necesaria para avanzar.
- Use esta función para detectar condiciones que deben evitar que el programa continúe incluso en el código de envío.
- En patios de recreo y compilaciones individuales (el valor predeterminado para la configuración de depuración de Xcode): si la condición se evalúa como falsa, detenga la ejecución del programa en un estado depurable después de imprimir el mensaje.
- En compilaciones -O (el valor predeterminado para la configuración de lanzamiento de Xcode): si la condición se evalúa como falsa, detenga la ejecución del programa.
- En las compilaciones sin verificación, la condición no se evalúa, pero el optimizador puede suponer que se evaluaría como verdadero. El incumplimiento de esa suposición en las compilaciones sin verificación es un grave error de programación.
afirmar
func assert(condition: @autoclosure () -> Bool, _ message: @autoclosure () -> String = default, file: StaticString = default, line: UWord = default)
Afirmación tradicional de estilo C con un mensaje opcional.
-
Utilice esta función para las comprobaciones de estado interno que están activas durante las pruebas pero que no afectan el rendimiento del código de envío. Para verificar el uso no válido en las versiones de lanzamiento; ver condición previa.
-
En patios de recreo y compilaciones individuales (el valor predeterminado para la configuración de depuración de Xcode): si la condición se evalúa como falsa, detenga la ejecución del programa en un estado depurable después de imprimir el mensaje.
- En las compilaciones -O (el valor predeterminado para la configuración de lanzamiento de Xcode), la condición no se evalúa y no hay efectos
- En las compilaciones sin verificación, la condición no se evalúa, pero el optimizador puede suponer que se evaluaría como verdadero. El incumplimiento de esa suposición en las compilaciones sin verificación es un error grave de programación
¿Cuál es la diferencia entre
precondition(condition: Bool, message: String)
y
assert(condition: Bool, message: String)
en Swift?
Ambos me parecen iguales. ¿En qué contexto debemos usar uno sobre el otro?
Encontré que Swift afirma: el manual que falta es útil
debug release release
function -Onone -O -Ounchecked
assert() YES NO NO
assertionFailure() YES NO NO**
precondition() YES YES NO
preconditionFailure() YES YES YES**
fatalError()* YES YES YES
Y de interesantes debates sobre Swift Evolution
- afirmar: verificando su propio código para errores internos
- condición previa: para verificar que sus clientes le hayan dado argumentos válidos.
Además, debe tener cuidado sobre qué usar, consulte la afirmación Nivel de falla y optimización
La
precondition
está activa en el modo de lanzamiento, por lo que cuando envíe su aplicación y la condición previa haya fallado, la aplicación finalizará.
Assert
funciona solo en modo de depuración como predeterminado.
Encontré esta gran explicación cuando usarla en NSHipster:
Las afirmaciones son un concepto tomado de la lógica clásica. En lógica, las afirmaciones son declaraciones sobre proposiciones dentro de una prueba. En programación, las afirmaciones denotan suposiciones que el programador ha hecho sobre la aplicación en el lugar donde se declaran.
Cuando se utilizan en la condición de condiciones previas y posteriores, que describen las expectativas sobre el estado del código al principio y al final de la ejecución de un método o función, las aserciones forman un contrato. Las aserciones también se pueden usar para imponer condiciones en tiempo de ejecución, a fin de evitar la ejecución cuando fallan ciertas condiciones previas.
assert
es para controles de cordura durante las pruebas, mientras que la
precondition
es para protegerse contra cosas que, si suceden, significarían que su programa simplemente no podría proceder razonablemente.
Entonces, por ejemplo, podría hacer una
assert
en algún cálculo que tenga resultados sensibles (dentro de algunos límites, por ejemplo), para encontrar rápidamente si tiene un error.
Pero no querrá enviar eso, ya que el resultado fuera de límite
puede
ser válido y no crítico, por lo que no debería bloquear su aplicación (suponga que solo la está usando para mostrar el progreso en una barra de progreso).
Por otro lado, verificar que un subíndice en una matriz es válido cuando se busca un elemento es una
precondition
.
No hay una próxima acción razonable para que el objeto de matriz tome cuando se le solicita un subíndice no válido, ya que
debe
devolver un valor no opcional.
Texto completo de los documentos (intente
assert
clic en la
assert
y
precondition
en Xcode):
Condición previa
Verifique una condición necesaria para avanzar.
Use esta función para detectar condiciones que deben evitar que el programa continúe incluso en el código de envío.
En patios de recreo y compilaciones individuales (el valor predeterminado para la configuración de depuración de Xcode): si la
condition
evalúa como falsa, detenga la ejecución del programa en un estado depurable después de imprimir elmessage
.En compilaciones -O (el valor predeterminado para la configuración de lanzamiento de Xcode): si la
condition
evalúa como falsa, detenga la ejecución del programa.En las compilaciones sin verificación, la
condition
no se evalúa, pero el optimizador puede suponer que se evaluaría comotrue
. El incumplimiento de esa suposición en las compilaciones sin verificación es un grave error de programación.
Afirmar
Afirmación tradicional de estilo C con un mensaje opcional.
Utilice esta función para las comprobaciones de estado interno que están activas durante las pruebas pero que no afectan el rendimiento del código de envío. Para verificar el uso no válido en las versiones de lanzamiento; ver
precondition
.
En patios de recreo y compilaciones individuales (el valor predeterminado para la configuración de depuración de Xcode): si la
condition
evalúa como falsa, detenga la ejecución del programa en un estado depurable después de imprimir elmessage
.En las compilaciones -O (el valor predeterminado para la configuración de lanzamiento de Xcode), la
condition
no se evalúa y no hay efectos.En las compilaciones sin verificación, la
condition
no se evalúa, pero el optimizador puede suponer que se evaluaría comotrue
. El incumplimiento de esa suposición en las compilaciones sin verificación es un grave error de programación.