|
| typedef i java Fra : Thomas Krog |
Dato : 10-05-01 11:11 |
|
Findes der noget i java der svarer til typedef fra c++ dvs:
typedef int VINDEX;
efter denne linje i c++ virker VINDEX som et alias for int.
Eller er man i java nødt til at oprette en klasse (*) for at opnå samme
virkning
(*) Med alle de ulember det indebærer:
- brug af new operator
- stærkt stigende antal klasser hvis man forsgøer at abstrahere de fleste
typer
- redefinering af alle de operatorer der kan anvendes på standard typer.
- a+b bliver til a.add(b) (betyder at lange udtryk bliver sværere at læse)
| |
Martin Schou (10-05-2001)
| Kommentar Fra : Martin Schou |
Dato : 10-05-01 12:58 |
|
Desværre kender jeg ikke svaret på dit spørgsmål.
Men jeg vil mægtig gerne vide, hvad pointen er i at bruge et andet navn
for simple datatyper, for jeg kan ikke rigtig se det smarte i at skrive
....
typedef int WINDEX;
WINDEX TalA, TalB;
....
i stedet for at skrive
....
int TalA, TalB;
....
Jeg er ganske nysgerrig.
/Hektor
| |
Lars Dam (10-05-2001)
| Kommentar Fra : Lars Dam |
Dato : 10-05-01 14:39 |
|
On Thu, 10 May 2001 12:10:52 +0200, "Thomas Krog"
<rick@kampsax.dtu.dk> wrote:
>Findes der noget i java der svarer til typedef fra c++ dvs:
>typedef int VINDEX;
Niks.
>
>efter denne linje i c++ virker VINDEX som et alias for int.
>
>Eller er man i java nødt til at oprette en klasse (*) for at opnå samme
>virkning
Yup.
>(*) Med alle de ulember det indebærer:
>- brug af new operator
>- stærkt stigende antal klasser hvis man forsgøer at abstrahere de fleste
>typer
>- redefinering af alle de operatorer der kan anvendes på standard typer.
>- a+b bliver til a.add(b) (betyder at lange udtryk bliver sværere at læse)
Dette er operator overloading som Java ikke har. Så du bliver nødt til
at lave add(),sub() etc. Med vilje ikke implementeret i Java da
op.overloading i 99% bliver misbrugt.
Jeg er nu nysgerrig, hvorfor har du behov for at 'typedef'e'? Måske
kan det være at du ikke har brug for det, men du kun ser de muligheder
du kender fra C++ verdenen?
Selv har jeg kodet Java i mange år nu og har ikke haft brug for typdef
endnu.
vh. ld
--
"Time is the fire in which we burn"
| |
Thomas Krog (10-05-2001)
| Kommentar Fra : Thomas Krog |
Dato : 10-05-01 16:28 |
|
> Dette er operator overloading som Java ikke har. Så du bliver nødt til
> at lave add(),sub() etc. Med vilje ikke implementeret i Java da
> op.overloading i 99% bliver misbrugt.
til klasser for komplekse tal og matricer synes jeg nu det er meget
praktisk. Kan du give et eksempel på misbrug?
> Jeg er nu nysgerrig, hvorfor har du behov for at 'typedef'e'?
Primært for at gøre det overkommeligt at ændre typen af fx. VINDEX (vertex
index) fra eksemplet. For tiden skriver jeg en algoritme i c++ som regner på
et antal punkter i planen. Det er nærmest umuligt at sige på forhånd hvilken
type disse koordinater skal have. Følgende java typer er alle gode
kandidater:
short
int
long
float
double
Desuden er unsigned også en mulighed.
Algoritmens hastighed kan være stærkt afhængig af koordinaternes type. Det
samme gælder pladsforbruget. Engang var hastigheden næsten den samme for int
og float, men idag er float væsentligt hurtigere(*). Den slags er svært at
forudsige. Måske vil brugeren gerne kunne ændre typen alt efter hvilken
opgave algoritmen skal løse. Derfor er koordinaterne blevet typedef'et. I
rene algoritmer typedef'er jeg næsten alle typer så der aldrig står en
grundlæggende type i min kode. Som regl får jeg et helt typedef hirarki der
minder lidt om et klassehirarki.
Desuden mener jeg også at koden er en smule mere læselig da VINDEX er mere
beskrivende end int.
>Måske
> kan det være at du ikke har brug for det, men du kun ser de muligheder
> du kender fra C++ verdenen?
jo, hvis du kender nogle alternative løsninger i java vil jeg selvfølgelig
gerne høre...
(*) og for rigtig lang tid siden (fra før co-processoren) var der kæmpe
hastighedsforskel på int og float
| |
|
|