Verschil tussen “voorwaarde” en “beweren” in swift?

Wat is het verschil tussen precondition(condition: Bool, message: String)en assert(condition: Bool, message: String)in Swift?

Ik vind ze allebei hetzelfde. In welke context moeten we de een boven de ander gebruiken?


Antwoord 1, autoriteit 100%

Assertis voor gezond verstandscontroles tijdens het testen, terwijl preconditionis om te waken tegen dingen die, als ze gebeuren, zouden betekenen dat je programma redelijkerwijs niet door kan gaan.

Dus je zou bijvoorbeeld een Assertkunnen plaatsen op een berekening met verstandige resultaten (binnen bepaalde grenzen, bijvoorbeeld), om snel te ontdekken of je een fout hebt. Maar je zou daar niet mee willen verzenden, omdat het out-of-bound resultaat mogelijkgeldig is, en niet kritisch, dus je app zou niet moeten crashen (stel dat je het alleen gebruikt om de voortgang weer te geven in een voortgangsbalk).

Aan de andere kant is het controleren of een subscript op een array geldig is bij het ophalen van een element een precondition. Er is geen redelijke volgende actie voor het array-object om te ondernemen wanneer om een ​​ongeldig subscript wordt gevraagd, aangezien het moeteen niet-optionele waarde teruggeven.

Volledige tekst uit de documenten (probeer optie te klikken op Asserten preconditionin Xcode):

Voorwaarde

Controleer een noodzakelijke voorwaarde om vooruitgang te boeken.

Gebruik deze functie om omstandigheden te detecteren die de
programma kan zelfs in de verzendcode niet doorgaan.

  • In speeltuinen en -Onone builds (de standaard voor Xcode’s Debug
    configuratie): als preconditionevalueert naar onwaar, stop het programma
    uitvoering in een foutopsporingsstatus na het afdrukken van message.

  • In -O builds (de standaard voor de release-configuratie van Xcode):
    als conditiononwaar is, stop dan de uitvoering van het programma.

  • In -Ounchecked builds wordt conditionniet geëvalueerd, maar de
    optimizer mag aannemen dat het zouals truezou worden geëvalueerd. Mislukking
    om aan die veronderstelling te voldoen in -Ounchecked builds is een serieuze
    programmeerfout.

Bevestigen

Traditionele C-stijl bewering met een optioneel bericht.

Gebruik deze functie voor interne sanity checks die actief zijn
tijdens het testen, maar hebben geen invloed op de prestaties van de verzendcode.
Om te controleren op ongeldig gebruik in release-builds; zie precondition.

  • In speeltuinen en -Onone builds (de standaard voor Xcode’s Debug
    configuratie): als preconditionevalueert naar onwaar, stop het programma
    uitvoering in een foutopsporingsstatus na het afdrukken van message.

  • In -O builds (de standaard voor de release-configuratie van Xcode),
    conditionwordt niet geëvalueerd en er zijn geen effecten.

  • In -Ounchecked builds wordt conditionniet geëvalueerd, maar de
    optimizer mag aannemen dat het zouals truezou worden geëvalueerd. Mislukking
    om aan die veronderstelling te voldoen in -Ounchecked builds is een serieuze
    programmeerfout.


Antwoord 2, autoriteit 76%

Ik heb Swift beweert – de ontbrekende handleiding gevondenbehulpzaam zijn

                       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

En van Interessante discussies over Swift Evolution

– assert: uw eigen code controleren op interne fouten

– voorwaarde: om te controleren of uw klanten u geldige argumenten hebben gegeven.

Je moet ook voorzichtig zijn met wat je moet gebruiken, zie assertionFailure and Optimization Level


Antwoord 3, autoriteit 14%

De preconditionis actief in de release-modus, dus wanneer u uw app verzendt en de voorwaarde faalt, wordt de app beëindigd.
Assertwerkt standaard alleen in de foutopsporingsmodus.

Ik vond deze geweldige uitleg wanneer ik het op NSHipster moest gebruiken:

Beweringen zijn een concept dat is ontleend aan de klassieke logica. in logica,
beweringen zijn uitspraken over proposities binnen een bewijs. In
programmering, beweringen duiden aannames aan die de programmeur heeft gemaakt
over de aanvraag op de plaats waar ze worden aangegeven.

Bij gebruik in de hoedanigheid van precondities en postcondities, die
beschrijf de verwachtingen over de staat van de code aan het begin en
einde van de uitvoering van een methode of functie, beweringen vormen een contract.
Beweringen kunnen ook worden gebruikt om voorwaarden tijdens runtime af te dwingen, in
om uitvoering te voorkomen wanneer bepaalde randvoorwaarden falen.


Antwoord 4, autoriteit 5%

voorwaarde

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

Controleer een noodzakelijke voorwaarde om vooruitgang te boeken.

  1. Gebruik deze functie om omstandigheden te detecteren die het programma moeten verhinderen
    zelfs in de verzendcode niet doorgaan.
  2. In speeltuinen en -Onone-builds (de standaard voor Debug van Xcode
    configuratie): als de conditie onwaar is, stop dan het programma
    uitvoering in een foutopsporingsstatus na het afdrukken van het bericht.
  3. In -O builds (de standaard voor de release-configuratie van Xcode): if
    voorwaarde evalueert naar onwaar, stop de uitvoering van het programma.
  4. In -Ounchecked builds wordt de conditie niet geëvalueerd, maar de optimizer
    mag aannemen dat het zou evalueren naar waar. Daar niet aan voldoen
    aanname in -Ounchecked builds is een ernstige programmeerfout.

bevestigen

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

Traditionele C-stijl bewering met een optioneel bericht.

  1. Gebruik deze functie voor interne gezondheidscontroles die actief zijn tijdens
    testen, maar hebben geen invloed op de prestaties van de verzendcode. om te controleren op
    ongeldig gebruik in release-builds; zie voorwaarde.

  2. In speeltuinen en -Onone builds (de standaard voor Xcode’s Debug
    configuratie): als de conditie onwaar is, stop dan het programma
    uitvoering in een foutopsporingsstatus na het afdrukken van het bericht.

  3. In -O builds (de standaard voor de release-configuratie van Xcode),
    toestand wordt niet geëvalueerd en er zijn geen effecten
  4. In -Ounchecked builds wordt de conditie niet geëvalueerd, maar de optimizer
    mag aannemen dat het zou evalueren naar waar. Daar niet aan voldoen
    aanname in -Ounchecked builds is een ernstige programmeerfout

Antwoord 5

Ik wilde even mijn 2 cent toevoegen. U kunt zoveel beweringen in uw code toevoegen als u wilt. U kunt uw code verzenden met deze beweringen. Swift evalueert deze codeblokken NIET voor productie-apps. Deze worden alleen geëvalueerd in het geval van debug-modus.

Documentatielink toevoegen

Ook afbeelding van swift.org bijvoegen

voer hier de afbeeldingsbeschrijving in

Let ook op, bij randvoorwaarden is dit niet het geval.
Code die met voorwaarden wordt geleverd, crasht en de app wordt beëindigd als de voorwaarden niet als waar worden beoordeeld.

Zo kort, beweringen zijn voor foutopsporing, maar kunnen worden verzonden zonder de productie te beïnvloeden. Behandelingen worden geëvalueerd in de debugmodus, maar niet in productie.

en

Voorwaarden zijn om ervoor te zorgen dat onverwachte dingen niet gebeuren op productieomgeving. Die voorwaarden worden geëvalueerd en beëindigt uw app voor het geval ze worden geëvalueerd om vals te zijn

Other episodes