[J2SE 1.5] Alle core classes rewritten?

Pagina: 1
Acties:

  • Tuinhark
  • Registratie: April 2000
  • Laatst online: 22-08 20:24
Ik heb begrepen dat in de 'jdk' 1.5 het standaard mogelijk is (gaat zijn) om generics te gebruiken. Nu vroeg ik me af... houdt dit in dat 'alle' core classes moeten worden herschreven? :?

Nu is het zo dat een add-on voor 1.4 is te downloaden, maar daar zitten de collection en reflection classes in (of stubs, ja ik weet :)). Zelf ben ik op dit moment veel bezig met de JFC/Swing API en ik kom veel classes/interfaces tegen (voornamelijk de modellen) waarvan ik vind dat het handig zou zijn als die ook geparameteriseerd waren. :)

Na een beetje research te hebben gedaan lijkt het er volgens mij op dat alleen Thread (-related?) classes (waarom?), reflection classes en de collection classes worden herschreven. Ik stel me voor dat het veel werk is om dat allemaal voormekaar te spelen, maar niet onmogelijk of lastig (met het oog op fabrikanten die ook Java VM's produceren). Maar is er iemand die misschien meer info heeft/weet? B)

:Y)

[ Voor 0% gewijzigd door Tuinhark op 15-10-2002 22:16 . Reden: :X ]


Verwijderd

Aleen vage geruchten...

Ik heb op javahova.net al een paar keer gehoord dat ze voor 1.5 een grote schoonmaakbeurt willen houden, maar ik heb bij sun nog geen officiële bevestiging gezien.

Wat me wel is opgevallen is dat ze bij de 1.4.0 release een aantal onderdelen kapot hebben gemaakt t.o.v. de 1.3.1 release, waarvoor nog geen fixes in de 1.4 update zaten. Vooral de look & feel heeft het zwaar te voorduren gehad (ik gebruik nu voor een aantal onderdelen de gerecompilede 1.3.1 source). Ook het nieuwe 'verbeterde' focusmodel werkt niet helemaal zoals het hoort (zie quote sun)

Ik heb het idee dat ze nog ff snel wat features wouden testen (zoals de minimale XML serialisation, verschillende grafische/ui dingtjes en die nieuwe io toestand) voordat ze begonnen met de grote schoonmaak voor 1.5. Bovendien is het ook vreemd dat de J2EE 1.4 zo lang op zich laat wachten (ik heb er iig nog niks van gehoord).


enfin... over generics heb ik verder ook nog niet veel nieuws gehoord :+

  • Tuinhark
  • Registratie: April 2000
  • Laatst online: 22-08 20:24
Je brengt een aantal interessante punten omhoog (zelf las ik laatst een betoog voor Java 2.0, wat bv alle deprecated meuk aan de kant moet zetten, een aantal vreemde quirks moet verhelpen, etc, etc -- ben helaas de URL even kwijt), maar ik krijg idd de indruk dat ze met 1.5 'grootse' plannen hebben.

Ik meen dat Alarmnummer en/of mbravenboer het ook had(den) over auto-boxing, een geintje dat C# al kent. Weg met (expliciete) de primitieve typen. :) Dit hoeft imo in principe geen gevolgen te hebben voor de core classes, dus dat scheelt dan weer.

Beetje OT dan: En over de J2EE.. Wat ik zo opmerkelijk vond was dat ze 'steeds' maar zaten te schuiven met de API's. Dán zat dit-en-dat in de J2EE, toen in de J2SE en toen weer terug. What's the deal with that?

:Y)

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Mwoah, sommige classes die een collection gebruiken (redelijk wat vermoed ik) of een andere class die geparameteriseerd moet worden, zullen ook hun aanroepen moeten veranderen, en de cast moeten verwijderen.

Tevens zit je natuurlijk met classes die 'alles' in een vector flikkeren ( hoewel dat aantal miniem zal zijn) moeten deze objecten nu gaan bundelen in een class en met deze de collection parameteriseren.

Echter deze aanpassingen zullen natuurlijk peanuts zijn met het omschrijven van de thread en refelection packages :)

/edit
Ik meen dat Alarmnummer en/of mbravenboer het ook had(den) over auto-boxing, een geintje dat C# al kent. Weg met (expliciete) de primitieve typen. :) Dit hoeft imo in principe geen gevolgen te hebben voor de core classes, dus dat scheelt dan weer.
Idd, autoboxing zal puur door de VM worden gedaan en zal imho niet zo'n grote syntaxwijziging te weeg brengen. Is denk ook een kleine moeite vergeleken met generics :)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

[edit]
hier stond onzin :)

  • Tuinhark
  • Registratie: April 2000
  • Laatst online: 22-08 20:24
Wát moet er worden veranderd aan de Thread classes trouwens (mbt generics)?

:Y)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Tuinhark schreef op 15 oktober 2002 @ 17:17:
Ik stel me voor dat het veel werk is om dat allemaal voormekaar te spelen, maar niet onmogelijk of lastig (met het oog op fabrikanten die ook Java VM's produceren). B)
:Y)
Generics worden niet op bytecode nivo doorgevoerd, dus daarom hoeft er ook geen verandering in de vm plaats te vinden.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 15 oktober 2002 @ 21:55:
Aleen vage geruchten...

Ik heb op javahova.net al een paar keer gehoord dat ze voor 1.5 een grote schoonmaakbeurt willen houden, maar ik heb bij sun nog geen officiële bevestiging gezien.
Afgezien van allerlei ideeen die ik op GoT heb gehoord heb ik eerlijk gezegd niets gehoord over grote schoonmaak acties in jdk1.5 Er komen een aantal syntactische suikers bij zoals autoboxing, en virtual machine sharing zal er ook in komen. Maar het lijkt me erg onwaarschijnlijk dat er een groot aantal fundamentele veranderingen gaan plaats vinden.

De voornaamste reden hiervan zal zijn dat er bij bedrijven veel commentaar zal ontstaan, doordat er op dit moment ontwikkeld wordt, en al veel ontwikkeld is voor de huidige java specificaties.

Ik had zelf ook liever gezien dat java een grote opschoonbeurt kreeg omdat java in sommige opzichten ook ouderdoms problemen begint te krijgen (kijk bv naar de over-complexe Swing class hierarchie). Maar ik denk dat we hier erg lang op kunnen gaan wachten :)

[reclame]
maar Nice daarin tegen voegt echt fantastische features toe aan java, en ik denk de toekomst voor echt interessante talen zit in projecten die geleid worden door een aantal academici die het zich kunnen permiteren om de specificaties volledig om te gooien. En die verder features toe kunnen voegen die een algemene acceptatie van een taal in de weg blijven staan, omdat ze gewoon te complex zijn voor de meeste programmeurs.
[/reclame]

misschien zou unprotected mode een interessante toevoeging zijn >:)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Tuinhark schreef op 15 oktober 2002 @ 22:28:
Ik meen dat Alarmnummer en/of mbravenboer het ook had(den) over auto-boxing, een geintje dat C# al kent. Weg met (expliciete) de primitieve typen. :) Dit hoeft imo in principe geen gevolgen te hebben voor de core classes, dus dat scheelt dan weer.
Autoboxing is niet hetzelfde als primitieve types te verwijderen. Wat je namelijk doet is als het nodig is te gaan converteren, maar er is wel een verschil. Mijn probleem met primitieve types is, is dat je er niet hetzelfde mee kan doen als een object type. Als je bv GJ neemt, dan kan je een lijst niet parametriseren met een 'int' of met een 'char' type. En ik wil dus helemaal van dat verschil af. Laat de computer inderdaad maar uitzoeken als het tijd is geworden om daar een int voor te gebruiken, maar als programmeur moet je met dat soort keuzes niet lastig gevallen worden.

En waar ik me eigelijk steeds meer aan ga ergeren is die vervelende null. Hoevaak geef je een null aan een methode of constructor mee? Dat gebeurt bij mij maar een fractie van de tijd, en toch moet je (als je correct programmeert) op die null gaan controleren en eventueel een foutmelding opwerpen. Maar waarom moet je je code zo verzieken met iets wat eigelijk niet veel zal voorkomen??

[reclame]
Daarom vind ik die null oplossing van Nice ook zo gaaf. In nice kan de waarde van een object nooit null zijn. Dus een waarde van het type 'String' kan nooit null zijn. Maar hoe moet je dan wel een null waarde krijgen als je daar toch behoefte aan hebt? Heel eenvoudig. Je kan dan het volgende type maken: '?String' Een waarde van dit type is null of een echte String.

Stel nu dat je de volgende methode hebt:
String? foo(){..};
en de volgende assignment:
String s = foo();
dan krijg je een foutmelding omdat een waarde van het return type van foo ook een null kan zijn, en die waarde past niet in s.

In 99% van de gevallen ben je nooit geinteresseerd in die null, en de code zal door dit krachtiger typesysteem automatisch veel kleiner en inzichtelijker gaan worden.
[/reclame]

Verwijderd

Oh staat al vast dat autoboxing er in komt? Dat vind ik een goede stap, samen met generics is dit een grote vooruitgang naar mijn idee :)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 16 oktober 2002 @ 16:53:
Oh staat al vast dat autoboxing er in komt? Dat vind ik een goede stap, samen met generics is dit een grote vooruitgang naar mijn idee :)
Ik heb begrepen dat er een groot aantal syntactische suikers op het programma staan voor jdk1.5.

Verwijderd

Alarmnummer schreef op 16 oktober 2002 @ 16:54:
[...]

Ik heb begrepen dat er een groot aantal syntactische suikers op het programma staan voor jdk1.5.
Heb je een bron, of meer van horen zeggen? Wat voor syntactische suikers komen er nog meer?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

hier staan een aantal features van 'Tiger'
http://java.sun.com/features/2002/03/totiger.html
By the end of 2003, the next big release for J2SE is Tiger 1.5, which will reveal a number of additions to the Java programming language specifications:

Generics, similar to templates in C++
Autoboxing of primitives, which will resolve some problems with casting

In addition, developers will get better support for constants, providing programming shortcuts using import statements, improvements for iterating over collections, and metadata either as a keyword addition or a javadoc feature.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Tuinhark schreef op 15 oktober 2002 @ 17:17:
Ik heb begrepen dat in de 'jdk' 1.5 het standaard mogelijk is (gaat zijn) om generics te gebruiken. Nu vroeg ik me af... houdt dit in dat 'alle' core classes moeten worden herschreven? :?

Nu is het zo dat een add-on voor 1.4 is te downloaden, maar daar zitten de collection en reflection classes in (of stubs, ja ik weet :)). Zelf ben ik op dit moment veel bezig met de JFC/Swing API en ik kom veel classes/interfaces tegen (voornamelijk de modellen) waarvan ik vind dat het handig zou zijn als die ook geparameteriseerd waren. :)
http://nice.sourceforge.net/cgi-bin/view/Dev/SwingLibrary :P
Na een beetje research te hebben gedaan lijkt het er volgens mij op dat alleen Thread (-related?) classes (waarom?), reflection classes en de collection classes worden herschreven.
Ik heb niets gelezen over Thread classes, maar er worden op dit moment in GJ nog een aantal classes uit de java.util package geparametriseerd. Oa de Reference classes.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

*kick*

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Dat is inderdaad de juiste link, ik snap dus niet hoe ik aan die ander ben gekomen :?

Hier is nog een link.
http://nice.sourceforge.n...oc/NiceSwingDocumentation
Ze hebben een Nice aansluiting gemaakt op Swing, en hij is zelf ook zo nu en dan nog eens bezig met een SWT aansluiting :)

[edit]
ik zie dat er op de site een grote verbouwing is geweest. Ik neem aan dat een aantal pagina`s een andere plaats/naam hebben gekregen.

[offtopic]
Wat is vi een vreselijk programma zeg! Ik had geen betere editor beschikbaar bij mijn debian install, maar wat een akelig programma!

  • Tuinhark
  • Registratie: April 2000
  • Laatst online: 22-08 20:24
offtopic:
lol :+
Doe 'ns install van pico. Da's meen ik een iets handzamer editortje.


Ik meende trouwens al dat de URL die je eerder gaf verkeerd was. Ik bedoel.. ik ben niet de juiste persoon om een nieuw 'topic' over Nice in die Wiki achter te laten. 8)7

Verder blijf ik Nice een beetje 'eng' vinden. :) Oke, heb er dus nog niet feitelijk mee gewerkt, sommige "nieuwigheidjes tov Java" lijken me verschrikkelijk handig, maar ik krijg gewoon haast het gevoel dat het de kant van een script taaltje op gaat. [tot zover deze belediging :X :P]

NB: Zelfs ik zie (inmiddels) wel in dat features als generics en het voorkomen van ClassCastExceptions & NullPointers een enorme stap vooruit is. O-) Dat mogen ze wel overnemen naar Java. -- Waarom ga je dan geen Nice gebruiken? Dat is (nog) niet realistisch. Misschien voor mijn projectjes thuis, maar hier op het werk kan dat IMO gewoon niet, omdat we hier met Java tools werken. Ik krijg niet de indruk dat ik de Nice compiler zomaar overal bij kan betrekken. :/

:Y)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Tuinhark schreef op 18 oktober 2002 @ 13:57:

Verder blijf ik Nice een beetje 'eng' vinden. :) Oke, heb er dus nog niet feitelijk mee gewerkt, sommige "nieuwigheidjes tov Java" lijken me verschrikkelijk handig, maar ik krijg gewoon haast het gevoel dat het de kant van een script taaltje op gaat. [tot zover deze belediging :X :P]
Waarom denk je dit?

Veel krachtige features uit het functionele paradigma (vooral uit haskell) zijn erin verwerkt. Oa een krachtiger typesysteem, een lichte vorm van patterns, kortere syntax, hogere orde functies etc. En er staan nog een groot aantal nieuwe features op het programma zoals betere pattern matching, volledige design by contract, properties, haskell style interface implementatie (dus per ouder afhandelen en niet alle zut in 1 keer).

vb.

interface A{
...void a();
}

interface B{
...void b();
}

class C{}

C implements A{
...void a(){}
}

C implements B{
...void b(){}
}

(Dit heb ik aan hem voorgesteld maar er zijn nog een paar problemen die opgelost moet worden en waar we elkaar niet helemaal begrijpen).

Ik zie niet zozeer in wat deze uitermate krachtige (en misschien ook wel gecompliceerde features) te maken hebben met scripting.

  • TheOneLLama
  • Registratie: Oktober 2000
  • Laatst online: 20-01-2022

TheOneLLama

A llama like no llama before

Alarmnummer schreef op 16 oktober 2002 @ 16:46:
[...]
En waar ik me eigelijk steeds meer aan ga ergeren is die vervelende null. Hoevaak geef je een null aan een methode of constructor mee? Dat gebeurt bij mij maar een fractie van de tijd, en toch moet je (als je correct programmeert) op die null gaan controleren en eventueel een foutmelding opwerpen. Maar waarom moet je je code zo verzieken met iets wat eigelijk niet veel zal voorkomen??
Vaak is het onnodig om op null te checken, alleen als het meegeven van null onverwacht resultaat kan geven is het nodig.

Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

TheOneLLama schreef op 19 oktober 2002 @ 14:27:
[...]
Vaak is het onnodig om op null te checken, alleen als het meegeven van null onverwacht resultaat kan geven is het nodig.
Ik controleer alleen niet op null als een waarde null mag zijn. In alle andere gevallen controleer ik altijd op null. Bij non private methode met if(object == null) throw new NullPointerException(); en bij private methodes altijd met een assert statement.

Ik heb al een aantal vervelende fouten hiermee opgespoord en eigelijk zit mijn code redelijk vol met precondities. Puur om lang zoekwerk naar fouten te voorkomen.

  • Tuinhark
  • Registratie: April 2000
  • Laatst online: 22-08 20:24
Kee, we gaan inmiddels een beetje O/T, maar laten we het dan onder de noemer 'vooruitgang/toekomst' doen ofzo. Dan past het oorpronkelijke onderwerp daar ook onder. :)

Laten we vooropstellen dat ik niet eerder met Haskell heb gewerkt, maar als het ook maar een beetje lijkt op Clean (ja, ik weet, bijna equivalent B)), ben ik er niet denderend goed in. 'k Heb dat vak functioneel programmeren wel op school gehad (proggen in Clean), had ook nog een redelijk cijfer d'r voor (ja, slechts 1 kwartaal), maar ik kon er echt niet goed mee uit de voeten vond ik. Ik voelde me er denk-ik niet zo op m'n gemakt mee. (Net als logisch met programmeren overigens.)

Noem me maar concervatief ofzo. :)
Ik krijg bv een beetje de kriebels van het definieeren van methodes buiten een class. ;) Wat doet me dat denken aan die valse C++ truukjes.

Wat ik bijvoorbeeld wél weer leuk vindt is de mogelijkheid om argumenten in een willekeurige volgorde naar een methode te sturen. :) Impliciete constructors zijn ook grappig, maar het ontbreken van expliciete constructors vind ik wél weer eng. (Of mag je ze alsnog gewoon definieeren in je code? :?)

:Y)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Tuinhark schreef op 19 oktober 2002 @ 15:23:
Kee, we gaan inmiddels een beetje O/T, maar laten we het dan onder de noemer 'vooruitgang/toekomst' doen ofzo. Dan past het oorpronkelijke onderwerp daar ook onder. :)

Laten we vooropstellen dat ik niet eerder met Haskell heb gewerkt, maar als het ook maar een beetje lijkt op Clean (ja, ik weet, bijna equivalent B)), ben ik er niet denderend goed in. 'k Heb dat vak functioneel programmeren wel op school gehad (proggen in Clean), had ook nog een redelijk cijfer d'r voor (ja, slechts 1 kwartaal), maar ik kon er echt niet goed mee uit de voeten vond ik.
In 1e instantie vroeg ik me ook af wat ik eraan had en net zoals bij prolog word je eerst goed tegen de haren in gestreken omdat het zo anders is dan je normale (lees imperatieve) manier van denken.
Noem me maar concervatief ofzo. :)
ik noem het niet conservatief, maar vastgeroest (Ik heb dat ook hoor).
Ik krijg bv een beetje de kriebels van het definieeren van methodes buiten een class. ;) Wat doet me dat denken aan die valse C++ truukjes.
Er bestaat meer dan alleen java :) Objecten waar je methodes buiten dat object kan definieren heten ook wel open objects. En als je op de ouderwetse oo manier gaat proggen dan zul je bij grote structuren het overzicht kwijt raken van een stuk functionaliteit omdat het verspreid ligt en daarnaast beginnen je objecten on overichtelijk te raken omdat ze zo groot worden. Ik was daarom ook zo blij met het visitor design pattern :)

Daarnaast zou oo toch moeten staan voor reuse? Als iets niet gereused wordt is dat wel traversal. Daarom zou bv die visitor guide`s zo leuk (en in het functioneel proggen de fold functies). En dit kan je verder nog veel mooier doen bij Nice omdat je code niet verziekt is met het visitor design pattern.

Het is verder nog wel een taal die nog helemaal moet uitkristaliseren. Ze zijn op dit moment ook nog maar bij 0.7.4 en er staan nog erg veel veranderingen op het programma :)

Ik ben zelf voor het zo weinig mogelijk doen en het 'stomme' werk door de computer te laten uitvoeren. En bij een taal zoals Nice kan je dat beter voor elkaar krijgen.
Wat ik bijvoorbeeld wél weer leuk vindt is de mogelijkheid om argumenten in een willekeurige volgorde naar een methode te sturen. :)
Je bedoelt dat je argumenten een naam kan geven.

jan.setGegevens(naam:"jan",woonplaats:"grunn");

Dit komt geloof ik uit smalltalk en ik vind het echt een zware verbetering. Vooral als je een groot aantal argumenten moet meegeven.
Impliciete constructors zijn ook grappig, maar het ontbreken van expliciete constructors vind ik wél weer eng. (Of mag je ze alsnog gewoon definieeren in je code? :?)
Dit is ook nog een van mijn struikelblokken, maar het is de bedoeling dat je speciale constructor functies gaat aanmaken. In de toekomst gaat hier nog wat aan veranderen, omdat er meer mensen zijn met klachten.

  • TheOneLLama
  • Registratie: Oktober 2000
  • Laatst online: 20-01-2022

TheOneLLama

A llama like no llama before

Alarmnummer schreef op 19 oktober 2002 @ 14:38:
[...]

Ik controleer alleen niet op null als een waarde null mag zijn. In alle andere gevallen controleer ik altijd op null. Bij non private methode met if(object == null) throw new NullPointerException(); en bij private methodes altijd met een assert statement.
Van mij mag je, maar in een method waar zodra er null wordt meegeven er toch al een nullpointer exception uit voortkomt, is het niet nodig (en vrij zinloos lijkt mij) om er een if (object == null) voor te zetten.

Ik heb ff 1 minuutje lopen zoeken op GoT en vind dit van jou (je layout was wat netter geloof ik):
[rml][ JAVA] string replacen[/rml]

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
26
27
28
29
30
31
32
33
34
35
public static void replace(StringBuffer source,String findString, String replaceString, int startPos, int stopPos)
{
if(source == null)
throw new NullPointerException("source can`t be null");

if(findString == null)
throw new NullPointerException("findString can`t be null.");

if(findString.length()==0)
throw new NullPointerException("findString.length() must be greater than 0");

if(replaceString == null)
throw new NullPointerException("replaceString can`t be null.");

if(stopPos<0)
throw new IndexOutOfBoundsException("stopPos must be greater or equal to zero, stopPos = "+stopPos);

if(stopPos>source.length())
stopPos = source.length();

if(startPos<0)
throw new IndexOutOfBoundsException("startPos can`t be smaller than 0");

if(startPos>=stopPos)
throw new IndexOutOfBoundsException("startPos must be smaller than stopPos, startPos="+startPos+" stopPos="+stopPos);


startPos = source.indexOf(findString,startPos);
while(startPos>-1&&startPos<=stopPos)
{
source.replace(startPos,startPos+findString.length(),replaceString);
startPos = startPos+replaceString.length();
startPos = source.indexOf(findString,startPos);
}
}


Ja, dan zou ik ook helemaal gek worden van die nulls! En dan ook nog al die andere dingen:
- de out of bound exceptions
- een lege String die niet null is gooit een NullPointerException
- als stopPos out of bound is wordt ie automatisch kleiner gemaakt!?

Wat is nou het voordeel van deze dingen? Dat je in de Exception.toString() kan zien om welke parameter het gaat ofzo? (Wat je in je debugger ook gewoon kan zien).
Werkt niet echt vaak met de Sun JDK (daar weet ik het niet over), maar bij enkele anderen is het enige wat er vaak in een NullPointerException zit dan ook "nullpointer" of iets dergelijks, aangezien je de rest gewoon uit je debugger kan halen.

Ik kan me voorstellen dat je ergens waar null wel zonder NullPointerException gebruikt kan worden (bv een HashMap) je dat wilt voorkomen. Maar zelfs dan zou je jezelf moeten afvragen waarom je iemand niet wil toestaan null te gebruiken. Het lijkt erop dat Sun zelf hier in het verleden over van mening veranderd (Hashtable -> HashMap).

Verder zou een nullcheck handig kunnen zijn voor optimalizatie, maar dan enkel in een geval waar je null ook verwacht. Wat jij doet is het omgekeerde, je code wordt trager en groter voor dingen die de designer zelf mbv oa. assertions al lang had moeten oplossen. (Wil je dat uit bv. je invoer geen null komt dan moet je daar dat probleem oplossen. oa Nice heeft juist ook daarvoor allerlei leuke dingen)
Ik heb al een aantal vervelende fouten hiermee opgespoord en eigelijk zit mijn code redelijk vol met precondities. Puur om lang zoekwerk naar fouten te voorkomen.
Als je bv het stukje
code:
1
2
if(source == null)
  throw new NullPointerException("source can`t be null");

weglaat wil niet zeggen dat die preconditie eruit is. Het resultaat is namelijk nog steeds hetzelfde, een NullPointerException.

Ik ben in ieder geval niet de enige die er zo over denkt, bv. de GNU Classpath Hackers Guide,
http://www.gnu.org/software/classpath/doc/hacking.html#SEC10

Ik ben benieuwd hoe jij zo op dit idee gekomen bent. Is je dit aangeleerd of heb je dit zelf bedacht?

Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

TheOneLLama schreef op 19 oktober 2002 @ 16:57:
[...]
Van mij mag je, maar in een method waar zodra er null wordt meegeven er toch al een nullpointer exception uit voortkomt, is het niet nodig (en vrij zinloos lijkt mij) om er een if (object == null) voor te zetten.
Ik keur deze manier van aanpak zoals je gezien hebt dus af. Als je
gebruik maakt van precondities, dan moet je voordat je met de methode
begint, controles uitvoeren. Daarnaast kan je ook heel duidelijk de
voorwaarden bij mijn aanpak zien, omdat ze expliciet vermeld staan ipv
impliciet. Verder kan het bij jouw aanpak zelfs gebeuren dat er
geen foutmelding wordt opgeworpen omdat een stuk code niet werd
uitgevoerd (tenslotte is de voorwaarde impliciet vermeld, dus
misschien zie je hem bij een refactor-beurt wel over het hoofd).
- een lege String die niet null is gooit een NullPointerException
Dat had inderdaad een IllegalArgumentException of iets in die geest
moeten zijn. Het was die avond al vrij laat :+
- als stopPos out of bound is wordt ie automatisch kleiner gemaakt!?
Ik hou ook niet van vriendelijke functies, maar helaas zijn de methodes bij String ook op deze manier gemaakt, dus vandaar deze vriendelijkheid. In mijn eigen objecten doe ik het ook niet.
Wat is nou het voordeel van deze dingen? Dat je in de Exception.toString() kan zien om welke parameter het gaat ofzo? (Wat je in je debugger ook gewoon kan zien).
Je krijgt inderdaad meteen te zien waar het is fout gegaan. En verder
heb je geen debugger nodig hoor, je kan het ook netjes uit de
stacktrace halen :)
Ik kan me voorstellen dat je ergens waar null wel zonder NullPointerException gebruikt kan worden (bv een HashMap) je dat wilt voorkomen. Maar zelfs dan zou je jezelf moeten afvragen waarom je iemand niet wil toestaan null te gebruiken. Het lijkt erop dat Sun zelf hier in het verleden over van mening veranderd (Hashtable -> HashMap).
Het Collection framework is bedoelt als een heel generiek framework,
maar bij specifieke classes ben ik zelf zo streng mogelijk en Null
objecten zijn vaak ongewenst (dus die verbied ik ook).
Verder zou een nullcheck handig kunnen zijn voor optimalizatie, maar dan enkel in een geval waar je null ook verwacht. Wat jij doet is het omgekeerde, je code wordt trager en groter voor dingen die de designer zelf mbv oa. assertions al lang had moeten oplossen. (Wil je dat uit bv. je invoer geen null komt dan moet je daar dat probleem oplossen. oa Nice heeft juist ook daarvoor allerlei leuke dingen)
Je code wordt inderdaad trager en groter, maar ik kan wel garanderen
dat mijn code niet bij incorrecte invoer verder gaat en dat vind
ik dus erg belangrijk. En wat bedoel je dat de designer dit met
assertions had kunnen oplossen?
Als je bv het stukje
code:
1
2
if(source == null)
  throw new NullPointerException("source can`t be null");

weglaat wil niet zeggen dat die preconditie eruit is. Het resultaat is namelijk nog steeds hetzelfde, een NullPointerException.
Zoals ik boven al heb gezegd, je hebt nu een voorwaarde impliciet in
je code staan en dat vind ik persoonlijk een vrij slechte manier van
werken. Het kan zelfs gebeuren dat met jouw manier van aanpak objecten
in een inconsistente toestand achterblijven en dat zal bij mij minder
snel gebeuren.
Ik ben benieuwd hoe jij zo op dit idee gekomen bent. Is je dit
aangeleerd of heb je dit zelf bedacht?
Ik ben het op verschillende plaatsen tegengekomen, maar wat de meeste
indruk heeft gemaakt is de behandeling hiervan bij DBC. Ik heb het dus
niet zelf bedacht. En kijk verder de java classes maar eens door, je
zult zien dat ze hun invoer ook checken.

[edit]
onder linux zijn alleen maar ruckeditors uit.. grr.. wat een pokke dingen!

  • TheOneLLama
  • Registratie: Oktober 2000
  • Laatst online: 20-01-2022

TheOneLLama

A llama like no llama before

Alarmnummer schreef op 19 oktober 2002 @ 17:51:
[...]

Ik keur deze manier van aanpak zoals je gezien hebt dus af. Als je
gebruik maakt van precondities, dan moet je voordat je met de methode
begint, controles uitvoeren.
Hoezo moet je voordat je de methode begint de pre-condities checken? Pre lijkt me nou niet zozeer Pre in de zin dat het vooraan je method moet staan. Het gaat erom dat er aan een aantal voorwaarden voordaan moet worden worden, zo niet dan krijg je een Exception.
Daarnaast kan je ook heel duidelijk de
voorwaarden bij mijn aanpak zien, omdat ze expliciet vermeld staan ipv
impliciet. Verder kan het bij jouw aanpak zelfs gebeuren dat er
geen foutmelding wordt opgeworpen omdat een stuk code niet werd
uitgevoerd (tenslotte is de voorwaarde impliciet vermeld, dus
misschien zie je hem bij een refactor-beurt wel over het hoofd).
Tja, ik neem aan dat je documentatie en source naast elkaar houd als je met je programma aan de slag gaat, dus ook bij een refactor. Expliciter dan "als de waarde null is krijg je een NullPointerException" kun je het niet krijgen lijkt mij. Test jij alle post-condities op het einde van je source ook nog eens expliciet?
Dat had inderdaad een IllegalArgumentException of iets in die geest
moeten zijn. Het was die avond al vrij laat :+
Het ging me ook niet zozeer om de kleine dingen.. het was maar voor een postje op GoT, niet een hartslagmeter :)
Ik hou ook niet van vriendelijke functies, maar helaas zijn de methodes bij String ook op deze manier gemaakt, dus vandaar deze vriendelijkheid. In mijn eigen objecten doe ik het ook niet.
Hm, ja dat klopt wel inderdaad.
Je krijgt inderdaad meteen te zien waar het is fout gegaan. En verder
heb je geen debugger nodig hoor, je kan het ook netjes uit de
stacktrace halen :)
Ik moet zeggen dat ik dat wel een heel zwak argument vind ;) Je kan het uit de stacktrace halen, maar "netjes" wil ik dat al niet noemen. Als je met het door jou genoemde refactoring dmv van automatische refactoring namen van variablelen gaat wijzigen gaat het al mis.

En aangezien dat het enige echte voordeel wat ik er in kan zien ben ik niet bepaald overtuigt. Hoe ik het zie is dat jij en ik allebei op basis van de dezelfde gegevens, dezelfde code met dezelfde functionaliteit en maintainability (mist je het op de correcte manier doet natuurlijk) als resultaat. Het verschil is alleen dat mijn code sneller en compacter is, en het me minder tijd kost, en dat jij na 5 jaar de WAO in moet omdat je gek wordt van al die null-checks schrijven :P

Maar ieder z'n ding, zolang ik je niet hoef te betalen mag je doen wat je wilt van mij ;)
Het Collection framework is bedoelt als een heel generiek framework,
maar bij specifieke classes ben ik zelf zo streng mogelijk en Null
objecten zijn vaak ongewenst (dus die verbied ik ook).
Zoals ik al zei, op een plek waar je geen null wilt, en het maken van code die op null checkt een ander effect heeft (meer dan alleen de stacktrace), heb ik daar niks op tegen. Sterker dan dan doe ik het zelf ook natuurlijk :*)
Je code wordt inderdaad trager en groter, maar ik kan wel garanderen
dat mijn code niet bij incorrecte invoer verder gaat en dat vind
ik dus erg belangrijk.
Tja, als ik al die onnodige checks van jou weggooi heb ik een functie die in iedere usecase precies hetzelfde doet, behalve dat de Exception.toString() er anders uitziet. Het verschil zit em erin dat mijn code sneller is bij uitvoer met een correcte parameter, en jou code (soms, zeker niet altijd) sneller is bij een incorrecte parameter.
En wat bedoel je dat de designer dit met
assertions had kunnen oplossen?
Niet zozeer "dit", ik wou er alleen maar mee aangeven dat het detecteren van een ongewenste "null" gewenster is door het controleren van post-conditions, als door het verderop detecteren bij het aanspreken van een functie met een not-null pre-conditie.

Oftwel, eigenlijk hoor je bij goed testen meer dingen te vinden als:
Hey, op regel 666 krijg ik "null" terug van functie
code:
1
Invoer mijninvoer = krijgInvoerVanRaarDevice();

terwijl in de post-conditions staat dat dit niet mag, als:

Hey, op regel 1313 voer ik
code:
1
Invoer bewerkteinvoer = bewerkInvoer(mijninvoer);

en ik krijg een NullPointerException("null") (of in jou geval NullPointerException("invoer mag geen null zijn)) terug.

Dit alles doet niks af aan het belang van pre-conditions, maar zoals ik al zei bij mijn manier van werken zijn die ook gegarandeerd.
Zoals ik boven al heb gezegd, je hebt nu een voorwaarde impliciet in
je code staan en dat vind ik persoonlijk een vrij slechte manier van
werken.
En zoals ik al zei, je post conditions staan er net zo impliciet in. Je hebt toch documentatie, waarin je posts en pre staan. Na het maken van je functie test je toch of ie voldoet aan die voorwaarden? Na veranderingen in de code toch ook?
Het kan zelfs gebeuren dat met jouw manier van aanpak objecten
in een inconsistente toestand achterblijven en dat zal bij mij minder
snel gebeuren.
Zoals ik al zei, vanuit het oogpunt van optimalisatie zou je bovenaan sommige functies een null-check kunnen zetten. Het kan namelijk voorkomen dat je in mijn variant eerst wat objecten aanmaakt voor de nullpointer gesignaleerd wordt. Dit gaat natuurlijk alleen op als je verwacht dat je in je productie systeem er vanuit gaat dat nullpointers normaal zijn. (Wat voor het merendeel van de functies niet het geval is mag ik hopen).

Mocht je objecten aanmaken die "binnen de scope van je functie voor een inconsitente toestand zorgen" (hm je weet wel wat ik bedoel hoop ik, sockets etc.) dan mag ik aannemen dat je die met finally opruimt! (Zo niet, shame on you Alarmnummer! >:))

Gebeurt dat buiten de "scope" van je functie en heb je het zo gemaakt dat de NullPointerException pas daarna valt zet ik er natuurlijk ook een null-check voor (of desnoods net als jou bovenaan).

Het blinde eind van een varken kan zien dat als in dit voorbeeld "source" null is je een nullpointer exception krijgt, ook als er niet if (source == null) etc. voostaat. Aangezien de gemiddelde ITer nog net iets slimmer is ;)
Een complexere functie hoort gewoon goed getest te worden, ook op nulls, of je die null-checks van jou nou bovenaan hebt staan of niet (die kun je nl. ook vergeten).
Ik ben het op verschillende plaatsen tegengekomen, maar wat de meeste
indruk heeft gemaakt is de behandeling hiervan bij DBC. Ik heb het dus
niet zelf bedacht. En kijk verder de java classes maar eens door, je
zult zien dat ze hun invoer ook checken.
Ik nam al niet aan dat je het zelf bedacht. Ik zie niet in waarom je in Design By Contract deze functie op deze manier zou moeten schrijven. Test dan op z'n minst ook de post-conditions.
[edit]
onder linux zijn alleen maar ruckeditors uit.. grr.. wat een pokke dingen!
Gaat het over Java hier? Eclipse Eclipse Eclipse (of doet je geliefde jIDEA het ook onder linux eigenlijk?)
Als het over console gaat, probeer Joe eens :*)

Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

TheOneLLama schreef op 19 oktober 2002 @ 19:58:
Tja, ik neem aan dat je documentatie en source naast elkaar houd als je met je programma aan de slag gaat, dus ook bij een refactor. Expliciter dan "als de waarde null is krijg je een NullPointerException" kun je het niet krijgen lijkt mij. Test jij alle post-condities op het einde van je source ook nog eens expliciet?
Binnenkort wel :) Nice heeft vanaf de volgende versie beschikking over volledige DBC Dus pre/post condities en invariants :)
Ik moet zeggen dat ik dat wel een heel zwak argument vind ;) Je kan het uit de stacktrace halen, maar "netjes" wil ik dat al niet noemen. Als je met het door jou genoemde refactoring dmv van automatische refactoring namen van variablelen gaat wijzigen gaat het al mis.
IDEA doet het goed :P
Het verschil is alleen dat mijn code sneller en compacter is, en het me minder tijd kost, en dat jij na 5 jaar de WAO in moet omdat je gek wordt van al die null-checks schrijven :P
Ik erger me ook helemaal het apalazerus aan al die rotchecks. Ze verzieken je code helemaal. Helaas is java in dit opzich nog echt een boerenkinkel-taal. Voordat java voor het grote volk beschikbaar werd gesteld, zat er ook DBC in. Helaas is het eruit gehaald. Misschien omdat ze bang waren dat het dan niet een mainstreamtaal zou worden?
Maar ieder z'n ding, zolang ik je niet hoef te betalen mag je doen wat je wilt van mij ;)
Ik ben persoonlijk langer bezig om iets correct op te zetten dan om wat code te schrijven :) Daarnaast is de code ook zeker niet complex en maak ik vaak gebruik van een Assert class. Bv die uit JUnit.
Tja, als ik al die onnodige checks van jou weggooi heb ik een functie die in iedere usecase precies hetzelfde doet, behalve dat de Exception.toString() er anders uitziet. Het verschil zit em erin dat mijn code sneller is bij uitvoer met een correcte parameter, en jou code (soms, zeker niet altijd) sneller is bij een incorrecte parameter.
Mijn code is qua gebruikssnelheid inderdaad altijd langzamer. Maar snelheid vind ik vaak een overgewardeerd product :)
Oftwel, eigenlijk hoor je bij goed testen meer dingen te vinden als:
Hey, op regel 666 krijg ik "null" terug van functie
code:
1
Invoer mijninvoer = krijgInvoerVanRaarDevice();

terwijl in de post-conditions staat dat dit niet mag, als:

Hey, op regel 1313 voer ik
code:
1
Invoer bewerkteinvoer = bewerkInvoer(mijninvoer);

en ik krijg een NullPointerException("null") (of in jou geval NullPointerException("invoer mag geen null zijn)) terug.
Een taal is een verversmiddel van een bepaald idee. Op dit moment rij ik graag zo in mijn auto :) Maar na verloop van tijd veranderd dat :) Zie martin, die nullchecked niets meer :+
Dit alles doet niks af aan het belang van pre-conditions, maar zoals ik al zei bij mijn manier van werken zijn die ook gegarandeerd.
Bij was complexere algoritmes kan ik dat in ieder geval niet meteen opmaken. Ik zie het meer als een 'vanaf dit punt kan ik dit garanderen', en daardoor worden mijn algoritmes in mijn ogen eenvoudiger en dus inzichtelijker. Maar ik ben het echt met je eens dat het niet echt fijn is om te lezen. Maarja.. java is eigelijk ook best wel een achterhaalde taal. Projecten zoals IContract zou in dit geval voor java nog een redelijke oplossing zijn.
En zoals ik al zei, je post conditions staan er net zo impliciet in. Je hebt toch documentatie, waarin je posts en pre staan. Na het maken van je functie test je toch of ie voldoet aan die voorwaarden? Na veranderingen in de code toch ook?
Helaas kan je dat bij een utitily api natuurlijk nooit garanderen dat deze met juiste parameters wordt aangeroepen.
Mocht je objecten aanmaken die "binnen de scope van je functie voor een inconsitente toestand zorgen" (hm je weet wel wat ik bedoel hoop ik, sockets etc.) dan mag ik aannemen dat je die met finally opruimt! (Zo niet, shame on you Alarmnummer! >:))
Soms kan je niet meer terug komen en dan heb je niets in een finally. Vooral als je met meerdere threads werkt dan kan het soms voorkomen dat 1 thread faalt nadat hij een n aantal bewerkingen heeft gedaan, en nog een m aantal bewerkingen moet doen om dat object weer in een consistente toestand te brengen. Vaak kan je voorkomen dat die 1e n stappen genomen worden en zodoende heb je minder snel last van inconsistente objecten.
Ik nam al niet aan dat je het zelf bedacht. Ik zie niet in waarom je in Design By Contract deze functie op deze manier zou moeten schrijven. Test dan op z'n minst ook de post-conditions.
Het is wachten op de nieuwe versie van Nice :)
Gaat het over Java hier? Eclipse Eclipse Eclipse (of doet je geliefde jIDEA het ook onder linux eigenlijk?)
Als het over console gaat, probeer Joe eens :*)
Ik werk niet met Eclipse en al een hele tijd niet meer met IDEA (ondersteund geen generics). Ik had het over Emacs en die kloten editor: Kate.

  • TheOneLLama
  • Registratie: Oktober 2000
  • Laatst online: 20-01-2022

TheOneLLama

A llama like no llama before

Alarmnummer schreef op 19 oktober 2002 @ 21:07:
[...]

Binnenkort wel :) Nice heeft vanaf de volgende versie beschikking over volledige DBC Dus pre/post condities en invariants :)
Tja, dan hebben we het over andere dingen.. als alles voor je gegenereerd wordt (javabytecode in dit geval) ben je dus ook niet meer bezig met het zelf uittikken van dit soort dingen, noch heb je er zelf meer de hand in hoe effecient het is of hoe het eruit komt te zien.
IDEA doet het goed :P
Het automatisch meeveranderen van waardes in een string bij het throwen van Exception als je een variabele naam veranderd. Kweet niet of ik daar nou bij of droevig van moet worden :P De vraag is natuurlijk werkt het goed met i18n API ;)
[...]

Ik erger me ook helemaal het apalazerus aan al die rotchecks. Ze verzieken je code helemaal. Helaas is java in dit opzich nog echt een boerenkinkel-taal. Voordat java voor het grote volk beschikbaar werd gesteld, zat er ook DBC in. Helaas is het eruit gehaald. Misschien omdat ze bang waren dat het dan niet een mainstreamtaal zou worden?
M'n standpunt blijft dat als je er zo gek van wordt je het maar beter niet kan doen :P
Ik denk niet dat het zozeer komt omdat java een boerenkinkel taal zo zijn (wat het misschien wel is, daar niet van), ik denk dat het voormalijk komt door een filosofie erg sterk gespeeld heeft bij het ontwerpen van de taal. Hou alles zo simpel mogelijk. Niet zozeer dat je het dan snel kan leren, maar meer zodat je zo snel mogelijk kan begrijpen wat een ander met z'n code doet. Dat is namelijk een van de grootse taken in de IT, en is altijd de meest problematische taak geweest. Dit soort denken zie (zag?) je altijd heel sterk in bv. argument, een object copy of reference en een primitive copy of value. Zo min mogelijk "truukjes" en dingen er omheen.. dus geen generics, multidispatch, references in arguments, etc.
Het is niet zozeer dat die andere features (zoals generics) te moeilijk waren om te implementeren of te ingewikkeld zijn om te leren, het kan je code onnodig complex maken. Tenminste, dat vond Sun dus van de delen die zijn weggelaten.
Ik ben persoonlijk langer bezig om iets correct op te zetten dan om wat code te schrijven :) Daarnaast is de code ook zeker niet complex en maak ik vaak gebruik van een Assert class. Bv die uit JUnit.
Toch zul je het wel met me eens zijn neem ik dat je in je programma bij het testen meer fouten zou moeten vinden in de post-conditions (mbv assertions bijvoorbeeld) als in de pre-conditions bij een alsreeds geteste functie. Dat soort fouten wijst erop dat je of je post-conditions niet goed gecontroleerd hebt of je gewoon domweg een designfout gemaakt hebt, namelijk een waarde returnen die eventueel null kan zijn in een variable die geen null mag zijn (omdat dat tegen de pre's van de functies waarin ie gebruikt wordt gaat). Juist daar lijkt me bij het design de speciale not null types van Nice me handig.
Mijn code is qua gebruikssnelheid inderdaad altijd langzamer. Maar snelheid vind ik vaak een overgewardeerd product :)
Hm, ik denk dat hier een beetje de kern van een meningsverschilletje ligt. Ik werk vaak met J2ME targets waar je totale programma soms kleiner dan 50KB moet zijn. Dan zijn dit en wel meer van dit soort dingen (ook die bij mij op wat mee sympatie kunnen rekenen) natuurlijk helemaal "out of the question".
Dat wil niet zeggen dat ik in J2SE/J2EE ook zo werk natuurlijk, maar als ik zoiets als dit zie, wat geen zichtbaar voordeel oplevert en ook nog eens een performance/size/prijs(ik ben niet gratis natuurlijk :P) penalty met zich mee draagt dan doe ik het maar niet.

Maar voor de duidelijkheid, ik vind het dus niet "dom" van je omdat het een perfomance penatly zou zijn, dat is een non-issue wat mij betreft in J2SE of EE. Meer omdat je er voortdurend op loopt te kankeren dat je er gek van wordt, het je code verneukt, etc. >:)

"Dom" staat al netjes tussen quotes zoals je ziet, ik vind het niet echt dom van je. Je mag doen wat jou het beste bevalt, daar heb je het meeste aan lijkt me. Ik vond het wel intressant om te weten wat zo je motivatie erachter is (met name de DBC gedachte dus lijkt me).
Een taal is een verversmiddel van een bepaald idee. Op dit moment rij ik graag zo in mijn auto :) Maar na verloop van tijd veranderd dat :) Zie martin, die nullchecked niets meer :+
Als ik voor J2ME bezig ben doe ik nog veel ergere dingen soms :D
Bij was complexere algoritmes kan ik dat in ieder geval niet meteen opmaken. Ik zie het meer als een 'vanaf dit punt kan ik dit garanderen', en daardoor worden mijn algoritmes in mijn ogen eenvoudiger en dus inzichtelijker. Maar ik ben het echt met je eens dat het niet echt fijn is om te lezen. Maarja.. java is eigelijk ook best wel een achterhaalde taal. Projecten zoals IContract zou in dit geval voor java nog een redelijke oplossing zijn.
Ik zeg ook niet dat je bij complexere (vaak grotere) methods het niet meer zou mogen doen (of dat ik dat zelf niet doe!), maar in erg veel gevallen (heel veel) zou je het best weg kunnen laten als je er zo gek van wordt, al hele-hele-helemaal als je op de late avond een posting voor GoT schrijft! :D :D
Helaas kan je dat bij een utitily api natuurlijk nooit garanderen dat deze met juiste parameters wordt aangeroepen.
Hier raak ik je kwijt.. zoals ik al aangaf (en wat je ook al lang snapt), zonder explicite nullcheck geeft dezelfde exception als met.
Soms kan je niet meer terug komen en dan heb je niets in een finally. Vooral als je met meerdere threads werkt dan kan het soms voorkomen dat 1 thread faalt nadat hij een n aantal bewerkingen heeft gedaan, en nog een m aantal bewerkingen moet doen om dat object weer in een consistente toestand te brengen. Vaak kan je voorkomen dat die 1e n stappen genomen worden en zodoende heb je minder snel last van inconsistente objecten.
Tja, als je ook maar wat niet zeker van je zaak bent zet je gewoon die nullcheck er weer voor. Ik beweer allemaal dat ontzettend veel nullchecks onzinnig zijn. Ik durf het wel aan om te zeggen dat je bij 75% van alle nullchecks die je geschreven hebt wist dat als je ze niet zou maken het net zo makkelijk zou werken.

Nogmaals, het is niet alsof ik nog nooit == null in m'n code heb gezet hoor :)
Het is wachten op de nieuwe versie van Nice :)
Het is altijd wachten op de volgende versie :P Nee serieus ik doe er dan wel niet zo veel mee nog (niet in de laatste plaats omdat het voor J2ME zinloos is), maar ik vind nice wel een erg intressante ontwikkeling.
Ik werk niet met Eclipse en al een hele tijd niet meer met IDEA (ondersteund geen generics). Ik had het over Emacs en die kloten editor: Kate.
Kate :r De laatste keer dat ik dat prog aanraakte snapte de syntax highlighting het niet als ik escaping gebruikte in een shellscript geloof ik.

CodeGuide heeft we* generics ondersteuning: http://www.omnicore.com/
Moet bekennen gebruik het zelf ook niet ofzo (ooit versie 3.0), maar ja, alles beter dan Kate :r
Als Nice uitkomt met een plugin voor Eclipse (als ze SWT zo leuk vinden zijn ze er misschien al mee bezig?) ga je het dan wel gebruiken? ;)

Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com

Pagina: 1