Ik gebruik nu het assert commando
bij methoden/constructors en ik vraag me af hoe ik deze moet documenteren. Ik neem aan dat hier al wel een standaard voor is ontwikkeld. (Heb niets gevonden in de styleguide van sun).
Aardig punt. Volgens mij is er (nog) niks specifieks.
Je zou misschien wel de @throws AssertionError kunnen gebruiken?
Op Javaworld las ik dit:
http://java.sun.com/j2se/1.4/docs/guide/lang/assert.html
Het gebruik van assertions om pre-condities op parameters van public methoden te stellen af:
Je zou misschien wel de @throws AssertionError kunnen gebruiken?
Op Javaworld las ik dit:
en elders:Unfortunately, Java's assertion facility does not mesh with the standard documentation system as closely as the exception facility. The Javadoc system includes information regarding all throws clauses declared by a method. Assertions do not draw such direct attention. This is certainly sensible for assertions in general, but rather unfortunate when using assertions to check the validity of input arguments to a public method.
Overigens raadt Sun hier:As far as I can see there is no link to Javadoc so there is no option to get assertions included in the documentation automatically.
http://java.sun.com/j2se/1.4/docs/guide/lang/assert.html
Het gebruik van assertions om pre-condities op parameters van public methoden te stellen af:
Omdat ze dit afraden, is het de vraag of ze het in de toekomst op zullen nemen in Javadoc. Ze raden het echter weer wel aan voor post-condities.This convention is unaffected by the addition of the assert construct. An assert is inappropriate for such preconditions, as the enclosing method guarantees that it will enforce the argument checks, whether or not assertions are enabled. Further, the assert construct does not throw an exception of the specified type.
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Vreemd, ziet Sun je dan liever exceptions of errors gebruiken voor pre condities? Dan zou ik toch neigen naar errors, het breken van conventies bij een interface is gewoon not done.
Voor welke situaties vindt Sun assertions dan eigenlijk gepast?
* tomato heeft het idee dat ie het een beetje kwijt is
Ons wordt met Java aangeleerd assertions te gebruiken (niet de Sun implementatie) voor pre condities...
Voor welke situaties vindt Sun assertions dan eigenlijk gepast?
* tomato heeft het idee dat ie het een beetje kwijt is
Ons wordt met Java aangeleerd assertions te gebruiken (niet de Sun implementatie) voor pre condities...
er staat wel een artikel op javaworld:
http://www.javaworld.com/javaworld/jw-11-2001/jw-1109-assert.html
en hier nog meer info van sun:
http://java.sun.com/j2se/1.4/docs/guide/lang/assert.html
http://www.javaworld.com/javaworld/jw-11-2001/jw-1109-assert.html
en hier nog meer info van sun:
http://java.sun.com/j2se/1.4/docs/guide/lang/assert.html
Tja, het gaat vooral om conventies die je niet kunt uitdrukken in de interface (zoals beperkingen op integer range en dergelijke).tomato: Vreemd, ziet Sun je dan liever exceptions of errors gebruiken voor pre condities? Dan zou ik toch neigen naar errors, het breken van conventies bij een interface is gewoon not done.
Er zit wel een reden achter waarom ze dit niet adviseren: assertions staan standaard uit. Als je je applicatie of library dus distribueert kan je er van uit gaan dat je assertions niet worden uitgevoerd. Men ziet assertions wellicht dus eigenlijk als een soort debugging functionaliteit... maar ja, daar hadden we JUnit al voor
Welke implementatie dan wel? JUnit neem ik aan?Ons wordt met Java aangeleerd assertions te gebruiken (niet de Sun implementatie) voor pre condities...
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Precies, maar is het nou juist om daar assertions voor te gebruiken? Ik dacht eigenlijk altijd van wel, juist daar voor...mbravenboer: Tja, het gaat vooral om conventies die je niet kunt uitdrukken in de interface (zoals beperkingen op integer range en dergelijke).
Ik kan me eigenlijk zo snel niet herinneren hoe het nu zatWelke implementatie dan wel? JUnit neem ik aan?
Ik dacht dat we gebruik maakten van een Assert class:
code:
1
2
3
4
5
6
7
8
9
| public interface Assert {
static public void pre (boolean test, String message);
static public void post (boolean test, String message);
// en nog wat...
} |
Zoiets was het dacht ik. Maar dit is toch geen standaard Sun klasse? Er zaten wat aparte klassen in een package bij het boek (die ik overigens nooit echt gebruikt heb), dacht altijd dat ie daar in zat...
Idd, maar als assertions uit staan ben je flink de *piep* als je code serieus afhankelijk is van die condities. Vandaar dus dat ze het afraden...tomato: Precies, maar is het nou juist om daar assertions voor te gebruiken? Ik dacht eigenlijk altijd van wel, juist daar voor...
Ah, dat is wel iets anders ja... JUnit is meer voor test-cases. Daarbij kan je dan assertions gebruiken. Erg populairIk dacht dat we gebruik maakten van een Assert class
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Je kan ervoor zorgen dat je class het alleen doet als assertions geenabled is.Op zondag 27 januari 2002 16:15 schreef mbravenboer het volgende:
Idd, maar als assertions uit staan ben je flink de *piep* als je code serieus afhankelijk is van die condities. Vandaar dus dat ze het afraden...
Ik zag het ja, maar dat is nogal een paarde(n?)middel...Alarmnummer: Je kan ervoor zorgen dat je class het alleen doet als assertions geenabled is.
Ik heb trouwens ook geen idee of/hoe je aan kan geven dat je een executable jar wilt starten met assertions aan...
Lijkt mij een mooi moment om het Manifest naar XML formaat om te zetten
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
volgens mij heb ik iets gemist.. Wat is assert?
er staat wel een artikel op javaworld:Op zondag 27 januari 2002 19:09 schreef wasigh het volgende:
volgens mij heb ik iets gemist.. Wat is assert?
http://www.javaworld.com/javaworld/jw-11-2001/jw-1109-assert.html
en hier nog meer info van sun:
http://java.sun.com/j2se/1.4/docs/guide/lang/assert.html
hier staat het keurig netjes in uitgelegd..
(het is ook vrij nieuwe.. sinds jdk1.4)
Vandaar dat er in het boek dat bij ons voor Java gebruikt wordt een eigen Assert klasse gebruikt wordt (boek is uit '99).Alarmnummer: (het is ook vrij nieuwe.. sinds jdk1.4)
Ik gebruikt voorlopig deze constructie voor het assert statement. Ik maak hierbij dus onderscheid tussen pre en post conditions.
Als jullie nog op of aanmerkingen hebben hoor ik ze graag.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| /**
* Plaatst de 2e parameter van deze TwoParameterFunction
*
* @param parameter de in te stellen 2e parameter.
*
* @exception RuntimeErrorException wordt opgeworpen als er iets misgaat met het instellen.
*
* @precondition parameter mag niet null zijn.
*
* @precondition parameter2 kan niet ingesteld worden voor parameter1.
*
* @precondition parameter2 kan niet voor de 2e keer worden ingesteld.
*
* @postcondition het type van de function moet ingesteld zijn.
*/
final public void setParameter2(ExprTreeItem parameter)throws RuntimeErrorException{
assert parameter != null: "parameter can`t be null";
assert parameter1 != null: "Can`t set parameter2 before setting parameter1";
assert parameter2 == null: "parameter2 can`t be set again";
checkParameter2(parameter2);
assert getType()!=null: "type is not set";
parameter2 = parameter;
} |
Als jullie nog op of aanmerkingen hebben hoor ik ze graag.
Ik zie dat ik al 1 fout heb gemaakt. Je mag alleen assertions gebruiken voor postcondities van niet publieke functies.
If, however, there is a precondition on a nonpublic method and the author of
a class believes the precondition to hold no matter what a client does with
the class, then an assertion is entirely appropriate.
Pre bedoel je denk ik.... daar had ik het juist de hele tijd over met tomatoAlarmnummer: Ik zie dat ik al 1 fout heb gemaakt. Je mag alleen assertions gebruiken voor postcondities van niet publieke functies.
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Pagina: 1