Différence entre «pré-condition» et «affirmer» rapidement?

Quelle est la différence entre la precondition(condition: Bool, message: Ssortingng) et assert(condition: Bool, message: Ssortingng) dans Swift?

Les deux me ressemblent. Dans quel contexte devrions-nous utiliser l’un sur l’autre?

assert s’agit de vérifications de la santé mentale pendant les tests, alors que la precondition est de se prémunir contre des choses qui, si elles se produisent, signifieraient que votre programme ne pourrait tout simplement pas continuer raisonnablement.

Ainsi, par exemple, vous pouvez append une assert à un calcul ayant des résultats sensibles (dans certaines limites, par exemple), pour trouver rapidement si vous avez un bogue. Mais vous ne voudriez pas expédier avec cela, car le résultat hors limite peut être valide, et non critique, donc ne devrait pas planter votre application (supposez que vous l’utilisiez simplement pour afficher la progression dans une barre de progression).

D’autre part, vérifier qu’un indice sur un tableau est valide lors de l’extraction d’un élément est une precondition . Il n’y a pas d’action suivante raisonnable pour l’object tableau à demander à un indice non valide, car il doit renvoyer une valeur non optionnelle.

Texte intégral à partir des documents (essayez l’option en cliquant sur assert et precondition dans Xcode):

Condition préalable

Vérifier une condition nécessaire pour avancer.

Utilisez cette fonction pour détecter les conditions qui doivent empêcher le programme de continuer même dans le code d’expédition.

  • Dans les terrains de jeux et les constructions -Onone (valeur par défaut pour la configuration Debug de Xcode): si la condition fausse, arrêtez l’exécution du programme dans un état pouvant être débogué après l’impression du message .

  • In -O builds (valeur par défaut pour la configuration Release de Xcode): si la condition false, arrêtez l’exécution du programme.

  • Dans les générations -Ounchecked, la condition n’est pas évaluée, mais l’optimiseur peut supposer qu’il est évalué à true . Ne pas satisfaire cette hypothèse dans les builds -Ounchecked est une grave erreur de programmation.

Affirmer

Style C traditionnel affirmer avec un message facultatif.

Utilisez cette fonction pour les vérifications d’intégrité internes qui sont actives pendant les tests mais n’affectent pas les performances du code d’expédition. Pour rechercher une utilisation non valide dans les versions Release voir precondition

  • Dans les terrains de jeux et les constructions -Onone (valeur par défaut pour la configuration Debug de Xcode): si la condition fausse, arrêtez l’exécution du programme dans un état pouvant être débogué après l’impression du message .

  • Dans -O builds (la configuration par défaut pour la version de Xcode), la condition n’est pas évaluée et il n’y a pas d’effet.

  • Dans les générations -Ounchecked, la condition n’est pas évaluée, mais l’optimiseur peut supposer qu’il est évalué à true . Ne pas satisfaire cette hypothèse dans les builds -Ounchecked est une grave erreur de programmation.

J’ai trouvé Swift assert – le manuel manquant pour être utile

  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 

Et des discussions intéressantes sur Swift Evolution

– assert: vérifier votre propre code pour les erreurs internes

– condition préalable: pour vérifier que vos clients vous ont donné des arguments valables.

En outre, vous devez faire attention à ce qu’il faut utiliser, voir assertionFailure et Optmization Level

La precondition est active en mode de libération, de sorte que lorsque vous expédiez votre application et que la condition préalable échoue, l’application se termine. Assert fonctionne uniquement en mode debug par défaut.

J’ai trouvé cette excellente explication quand l’utiliser sur NSHipster:

Les assertions sont un concept emprunté à la logique classique. En logique, les assertions sont des déclarations sur des propositions dans une preuve. En programmation, les assertions dénotent des hypothèses que le programmeur a formulées à propos de l’application à l’endroit où elles ont été déclarées.

Lorsqu’elles sont utilisées dans la capacité de préconditions et de postconditions, qui décrivent les attentes concernant l’état du code au début et à la fin de l’exécution d’une méthode ou d’une fonction, les assertions forment un contrat. Les assertions peuvent également être utilisées pour appliquer des conditions au moment de l’exécution, afin d’empêcher l’exécution lorsque certaines conditions préalables échouent.

condition préalable

 func precondition(condition: @autoclosure () -> Bool, _ message: @autoclosure () -> Ssortingng = default, file: StaticSsortingng = default, line: UWord = default) 

Vérifier une condition nécessaire pour avancer.

  1. Utilisez cette fonction pour détecter les conditions qui doivent empêcher le programme de continuer même dans le code d’expédition.
  2. Dans les terrains de jeux et les constructions -Onone (valeur par défaut pour la configuration Debug de Xcode): si la condition est fausse, arrêtez l’exécution du programme dans un état pouvant être débogué après l’impression du message.
  3. In -O builds (valeur par défaut pour la configuration Release de Xcode): si la condition est false, arrêtez l’exécution du programme.
  4. Dans les générations -Ounchecked, la condition n’est pas évaluée, mais l’optimiseur peut supposer qu’il est évalué à true. Ne pas satisfaire cette hypothèse dans les builds -Ounchecked est une grave erreur de programmation.

affirmer

 func assert(condition: @autoclosure () -> Bool, _ message: @autoclosure () -> Ssortingng = default, file: StaticSsortingng = default, line: UWord = default) 

Style C traditionnel affirmer avec un message facultatif.

  1. Utilisez cette fonction pour les vérifications d’intégrité internes qui sont actives pendant les tests mais n’affectent pas les performances du code d’expédition. Pour rechercher une utilisation non valide dans les versions Release voir condition préalable

  2. Dans les terrains de jeux et les constructions -Onone (valeur par défaut pour la configuration Debug de Xcode): si la condition est fausse, arrêtez l’exécution du programme dans un état pouvant être débogué après l’impression du message.

  3. Dans les versions -O (valeur par défaut pour la configuration de la version de Xcode), la condition n’est pas évaluée et il n’y a pas d’effet
  4. Dans les générations -Ounchecked, la condition n’est pas évaluée, mais l’optimiseur peut supposer qu’il est évalué à true. L’impossibilité de satisfaire cette hypothèse dans les builds de