LostOblivion Skrevet 31. august 2007 Del Skrevet 31. august 2007 (endret) Hei, Tenk om du kunne skrive... Quaternion quat1 = new Quaternion(1, 0,0, 0); Quaternion quat2 = new Quaternion(0, 0, 1, 0); Quaternion quat3 = quat1 * quat2; Hadde vært flott, hva? Overloading i Java er nok en av de mest ønskede sentralideene for mange. Men hvorfor har egentlig Sun ikke implementert det enda? Og finnes ikke allerede egentlig overloading av String-objektet? String a = "Hei, "; String b = "mitt navn er Olai!"; String c = a + b; // c = "Hei, mitt navn er Olai" Endret 31. august 2007 av LostOblivion Lenke til kommentar
Jaffe Skrevet 31. august 2007 Del Skrevet 31. august 2007 (endret) Slik jeg har forstått, av å lese her, blir ikke + overloadet for String-objekter, et uttrykk med + mellom strenger blir gjort om til annen kode av preprosessoren. F.eks. "a" + "b" som blir new StringBuffer("a").append("b").toString(); Jeg syns dette blir stygt, da + plutselig får en helt annen mening -- det er ikke en operatør lenger, men en preprosessorkommando i tillegg til å være en operatør... Vel, det hele blir et stort surr. Endret 31. august 2007 av Jaffe Lenke til kommentar
LostOblivion Skrevet 31. august 2007 Forfatter Del Skrevet 31. august 2007 Hmmm. Men jeg er vel ikke den eneste som synes at Sun burde implementere overloading? Lenke til kommentar
Jaffe Skrevet 31. august 2007 Del Skrevet 31. august 2007 (endret) Jeg syns også det hadde vært en idé å implementere det, selv om jeg ikke bruker Java. De har visstnok ikke implementert det fordi det "gjør språket unødvendig komplisert", men spør du meg gjør det at man kan uttrykke seg lettere og mer direkte. Mange språk har jo muligheten, f.eks. C++ og Ruby. Endret 31. august 2007 av Jaffe Lenke til kommentar
krigun Skrevet 31. august 2007 Del Skrevet 31. august 2007 Hmmm. Men jeg er vel ikke den eneste som synes at Sun burde implementere overloading? 9398643[/snapback] Nei, jeg er helt enig med deg. De har vel ikke inkludert overloading fordi det kan føre til endel stygg og uleselig kode hvis det blir brukt feil (men er ikke helt sikker på hvorfor de ikke har det med). Derfor syns jeg det blir helt håpløst å holde på med linjær algebra i Java. Koden ser rett og slett ikke ut. Man pleier jo ikke å kjøre til jobb hver dag i 300 km/t hvis man har en veldig rask bil liksom... Lenke til kommentar
Zethyr Skrevet 31. august 2007 Del Skrevet 31. august 2007 Operator overloading gjør ikke språket unødvendig komplisert, det er tross alt frivillig å bruke det. Det fungerer jo greit å kjøre o1.add(o2), men jeg skal være enig i at å kunne skrive o1 + o2 hadde vært strålende. Her mangler Java en ganske kul feature som i noen tilfeller gjør kodejobben lettere. Lenke til kommentar
LostOblivion Skrevet 31. august 2007 Forfatter Del Skrevet 31. august 2007 (endret) Ja ikke sant. Det lille jeg lærte i C++ med op overloading og at jeg fant ut hvor praktisk og enkelt å bruke det var, får meg ikke til å forstå hvorfor det ikke finnes i Java. Og enda mer, hvis det er grunnen til hvorfor de ikke gjør det, så kan man si at uansett, vil en programmerer kunne skrive rotete kode. Det er jo helt opp til en selv... Måtte bare legge til: TULLBALL! av Sun... Endret 31. august 2007 av LostOblivion Lenke til kommentar
Kagee Skrevet 4. september 2007 Del Skrevet 4. september 2007 Jeg hadde sikkert skjønt denne tråden bedre, om noen kunne forklart begrepet Overloading for meg? Lenke til kommentar
Zethyr Skrevet 4. september 2007 Del Skrevet 4. september 2007 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. Lenke til kommentar
LostOblivion Skrevet 5. september 2007 Forfatter Del Skrevet 5. september 2007 Det som også er utrolig praktisk er å overloade + og - for klassen int, så minus blir pluss og pluss blir minus. Lenke til kommentar
Zethyr Skrevet 5. september 2007 Del Skrevet 5. september 2007 Hehe, det hadde jo vært smart Jeg tror ikke det går an å overloade annet enn klasser du selv har skrevet, så med mindre du skriver en wrapper-klasse så blir det litt problematisk Lenke til kommentar
CronoMan Skrevet 6. september 2007 Del Skrevet 6. september 2007 Mange språk har jo muligheten, f.eks. C++ og Ruby. 9398697[/snapback] Og ikke minst C# Lenke til kommentar
mar Skrevet 6. september 2007 Del Skrevet 6. september 2007 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. Lenke til kommentar
Zethyr Skrevet 6. september 2007 Del Skrevet 6. september 2007 (endret) 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] Hvis man skriver dette mye, så blir det betraktelig mer lesbart Det er klart at det kan bli forvirrende også.. se på C++, der vi f.eks. har et heltall 'a' og en outputstream 'b': a << 1 // Returnerer a*2 b << 1 // Skriver 1 til strømmen slik kan man definere egne oppførsler, så til slutt blir det vanskelig å holde styr på hva hvilke operatorerer gjør for hvilke datatyper. Endret 6. september 2007 av Zethyr Lenke til kommentar
Jaffe Skrevet 6. september 2007 Del Skrevet 6. september 2007 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] Hvis man skriver dette mye, så blir det betraktelig mer lesbart Det er klart at det kan bli forvirrende også.. se på C++, der vi f.eks. har et heltall 'a' og en outputstream 'b': a << 1 // Returnerer a*2 b << 1 // Skriver 1 til strømmen slik kan man definere egne oppførsler, så til slutt blir det vanskelig å holde styr på hva hvilke operatorerer gjør for hvilke datatyper. 9439339[/snapback] Jeg syns i grunn at at << er en smart måte å gjøre output på, og man kan jo f.eks. definere en klasse med en egen <<-operatørfunksjon som printer info om objektet av klassen. Det som eventuelt er forvirrende er vel det faktum at << egentlig er en overloadet bitshift (til venstre)-operatør. Lenke til kommentar
Zethyr Skrevet 6. september 2007 Del Skrevet 6. september 2007 Ja, det er smart at det er sånn.. poenget var å illustrere at man må passe seg for forvirring, samt å gi et eksempel på hva overloading gjør i praksis som mange kanskje har lett for å kjenne seg igjen i. Lenke til kommentar
Jaffe Skrevet 6. september 2007 Del Skrevet 6. september 2007 Jeg syns en av de definitive styrkene med operatøroverlasting er at man kan uttrykke det konseptet å addere noe, det å tilordne noe, eller det å indeksere noe, ved hjelp av de samme symbolene for alle objekter, i stedet for at de kun er forbeholdt primitivene. Om du f.eks. lager en egen datastruktur, kan du overlaste indekseringsoperatøren (dvs. []), slik at du kan bruke den til å indeksere elementer i datastrukturen, akkurat som du gjør med vanlige arrays. Selvsagt kunne man jo bare laget en metode kalt 'getElement' eller noe slikt, men hvorfor skal man ikke kunne benytte [] på samme måte som med arrays for å uttrykke akkurat det samme (det å hente et element)? En annen og kanskje mer praktisk bruk, er overlasting av tilordningsoperatøren, slik at man f.eks. kan tilordne et objekt nye data ved hjelp av samme skrivemåte som med primitive datatyper, altså med =. Lenke til kommentar
Frank2004 Skrevet 6. september 2007 Del Skrevet 6. september 2007 Jeg hadde sikkert skjønt denne tråden bedre, om noen kunne forklart begrepet Overloading for meg? 9429067[/snapback] http://en.wikipedia.org/wiki/Overloading Lenke til kommentar
LostOblivion Skrevet 9. september 2007 Forfatter Del Skrevet 9. september 2007 (endret) 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)); ? Må si at jeg egentlig ikke helt ser poenget her. Ser du virkelig ikke poenget her? Håper jeg hjalp deg å forstå... Endret 9. september 2007 av LostOblivion Lenke til kommentar
blackbrrd Skrevet 9. september 2007 Del Skrevet 9. september 2007 Som nevnt må du vite at << kan bety bitwise shift OG å skrive til en stream... Forvirrende spør du meg Da er det lettere med metoder med beskrivende navn... Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå