Gå til innhold

Overloading i Java--en drøm?


Anbefalte innlegg

Operator overloading vil si at man gir +, -, * og liknende operatorer egne betydninger.. Så om jeg f.eks. har en Matrise-klasse, så kan jeg f.eks. utføre matrisemultiplikasjon ved å skrive matrix1 *= matrix2;

 

Dette er et kraftig verktøy for å kunne gjøre deler av koden mer ryddig :) Altså, man bestemmer selv hva +, - osv. gjør, om man ønsker å gi dem noen betydning i det hele tatt.

9429136[/snapback]

 

Blir det egentlig så mye mer ryddig enn feks: matrix1 = matrix1.mult(matrix2)?

Må si at jeg egentlig ikke helt ser poenget her. Er greit at man sparer noen tegn her og der, men noe mer ryddig blir det vel egentlig ikke.

9438955[/snapback]

 

Så du mener altså at

 

Matrix projection = perspective.getMultipliedWith(camera.z.getMultipliedWith(camera.y.getMultipliedWith(camera.x)).getMultipliedWith(camera.pos)).getMultipliedWith(obj.z.getMultipliedWith(obj.y.getMultipliedWith(obj.x)).getMultipliedWith(obj.pos)));

 

er like ryddig og lett å skrive og forstå i forhold til

 

Matrix projection = perspective * (((camera.z * camera.y * camera.x) * camera.pos) * ((obj.z * obj.y * obj.x) * obj.pos));

 

? :thumbup:

 

Må si at jeg egentlig ikke helt ser poenget her.

 

Ser du virkelig ikke poenget her? :ermm::roll: Håper jeg hjalp deg å forstå... :thumbup:

9460703[/snapback]

 

Sorry men ser det fremdeles ikke. Skjønner jo at det lettere å bare skrive "*" og at det blir ferre tegn, men ser ikke det helt store i det. Under er forslag til en Java løsning, kunne sikkert vært bedre, men jeg vil påstå at den er ganske ryddig. Grunnet tiden på døgnet tar jeg forbehold når det gjelder paranteser :) Tror jeg klarte å lese ditt eksempel på riktig måte.

 

//Metode signatur
Matrix mult (Matrix... args);

//Ditt eksempel
Matrix camera = mult(mult (camerea.z, camera.y, camera.x), camera.pos);
Matrix obj = mult(mult(obj.z, obj.y, obj.x), obj.pos);
Matrix camObj = mult (camera, obj);
Matrix projection = mult (perspective, camObj);

//På en linje
Matrix projection = mult (perspective, mult (mult(mult (camerea.z, camera.y, camera.x), camera.pos), mult(mult(obj.z, obj.y, obj.x), obj.pos)));

Lenke til kommentar
Videoannonse
Annonse

Poenget her er jo faktisk at man skal kunne kalle forskjellige operasjoner med de enkleste uttrykkene mulig. Det er i seg selv her å overloade operatorer. Jeg mener nå at Java hvertfall burde ha denne muligheten der, så de som vil benytte seg av operator overloading skulle kunne gjøre det. De som ikke vil, og synes direkte kall av funksjoner er bedre, kan jo bare fortsette med det. :thumbup:

 

Skjønner jo at det lettere å bare skrive "*" og at det blir ferre tegn, men ser ikke det helt store i det.

 

- Da har du skjønt det. Hvor stort skal du ha det? :tease:

 

Som Jaffe sier, det er konseptet med operator overloading i Java som er poenget her. Hva folk mener er bedre, får de lage sin egen thread om. ;)

Endret av LostOblivion
Lenke til kommentar

Operator overloading vil uansett ikke redusere språket på noen måte, så lenge man har støtte for begge deler, noe man naturlig nok vil ha.

 

Samtidig irriterer det vettet av meg at man ikke kan angi standardverdier for argumenter til metoder på en fin måte, man må liksom lage <antall valgfrie argumenter> + 1 metoder.

Samme problemet i C# forsåvidt.

 

Føler at språkutviklerene prøver å bestemme hva og hvordan jeg skal utvikle kode.

Lenke til kommentar
Operator overloading vil uansett ikke redusere språket på noen måte, så lenge man har støtte for begge deler, noe man naturlig nok vil ha.

 

Samtidig irriterer det vettet av meg at man ikke kan angi standardverdier for argumenter til metoder på en fin måte, man må liksom lage <antall valgfrie argumenter> + 1 metoder.

Samme problemet i C# forsåvidt.

 

Føler at språkutviklerene prøver å bestemme hva og hvordan jeg skal utvikle kode.

9463605[/snapback]

 

Operator Overloading er et must. Er ikke muligheten i språket, så er det fordi det er et mikke mus-språk ;) Matriser er jo prakt-eksempelet på dette. Om man ikke ser det, så er man blind.

 

Det med argumentene må jeg si meg enig i. Liker veldig godt i C++ og VB6 at man kan skrive void blah(int a = 5, char b = 'h') etc.

Overloading er ingen pen måte å adressere det på.

 

Apropos << bitshift/stream; personlig kan jeg ikke fordra iostream, da bruker jeg heller string formating og printf ;)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...