Se l'affermazione con ritorno in JML
-
09-10-2019 - |
Domanda
ho bisogno di impostare una postcondizione che assicura a nulla di ritorno, se size_ è 0. Sulla base
if(size_ == 0)
return null;
Come posso fare che in jml? qualche idea? In seguito non funziona:
//@ ensures size_ == null ==> \return true;
grazie in anticipo
Soluzione
Prova
//@ ensures size_ == null ==> \result == true;
Esempio:
//@ ensures size_ == null ==> \result == true;
public boolean sizeUndefined() {
if (size_ == null)
return true;
return size_.length() > 0;
}
Si potrebbe anche semplicemente scrivere in questo modo:
//@ ensures size_ == null ==> \result;
Ecco la documentazione per \result
:
3.2.14
\result
Da una postcondizione normale o un bersaglio modifica di un metodo non nullo, l'identificatore speciale \ risultato è un'espressione specifica cui tipo è il tipo di ritorno del metodo. Denota il valore restituito dal metodo. \ Risultato è consentito solo all'interno di un pragma accerta, also_ensures, modifica o also_modifies che modifica la dichiarazione di un metodo non nullo.
Altri suggerimenti
Prima di tutto: che tipo è size_
, Object
o primitive(int)
In secondo luogo, ciò che il tipo di ritorno del metodo? Object
o primitive(boolean)
?
Non si può confrontare un tipo primitivo di null
, o null
ritorno in cui si suppone che un tipo primitivo da restituire. Se assumiamo size_
è int
e il ritorno è boolean
poi la post-condizione sarebbe
//@ ensures size_ == 0 ==> \result;