TSkogemann / operationOverload

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

#Operator Overloading

#Operator overloading bruges også i java, her kan man ikke skrive sine egne. Der findes to typer af Operator Overloading. De Unary og de #Binary.

#- Unary Operators: De tager et argument og et symbol. #+a kalder a.unaryPlus() #-a kalder til a.unaryMinus() #!a kalder a.not()

#+a giver som udgangspunkt ikke rigtig mening, da man antager en værdi er positiv til at begynde med. Men hvis du har en værdi som #eksempelvis kan være +2 eller -2, så kan man sætte assigne den til a og bruge +a, for at sikre sig at a=2. - Binary Operators: de tager #to argumenter og et symbol

#a + b kalder a.plus(b) #a - b kalder a.minus(b) #a * b kalder a.times(b) #a / b kalder a.div(b) #a % b kalder a.mod(b) a..b kalder a.rangeTo(b)

#Det er operationer som vi har brugt mange gange i java og funktionen af dem giver lidt sig selv.

#Kotlin har de samme array operations som i java. Så hvis man eksempelvis vil assigne værdi Eksempel: fun main(args: Array) {

#val myList: IntArray = intArrayOf(10, 20, 30, 40, 50) myList[2] = 4 // myList.set(2,4) val x = myList[2] print(x) } myList[2] = 4 Kunne #i princippet også skrives som : myList.set(2,4), hvis man ikke brugte operator overloading. I Kotlin kan man skrive custom Operation #overloaders Anton Ioleiva kommer med følgende eksempel:

#data class ForecastList(val city: String, val country: String, val dailyForecast: List) { public fun get(position: Int): #Forecast = dailyForecast[position] public fun size(): Int = dailyForecast.size()

#} Her overskriver han funktionen til hans liste, så han i stedet for at skulle skrive

#val forecast = weekForecast.dailyForecast[position]

#i stdet kan skrive :

#val forecast = weekForecast[position] Er det så smart ? Han skriver selv at man skal være meget påpasselig med at lave de her Operation #Overloads og det bør kun gøres hvis det er meget tydeligt hvad de rent faktisk gør.

#Det giver god mening når man har to integers at man kan bruge a+b. Men hvis lige pludeslig laver nye overload metode som eksempelvis #kan: #-lægge to kreditkontoer sammen #- lægge værdien af to huse sammen #- lægge værdien af to aktier sammen

#Så afgøres det af typen som den bliver kaldt med hvilken af de forskellige overload metoder som bliver kaldt. Dette kan hurtigt blive #forvirrende, når man skal læse andres kode. Det kan også gøre det svært at debugge, da man skal tage højde for flere forskellige #overload metoder som ikke nødvendigvis fungere ens.

#-Thomas

About