Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Perustason Tyyppimuunnos | Tietotyypit
Johdatus Golangiin

bookPerustason Tyyppimuunnos

Tyyppimuunnos tarkoittaa tietojen muuntamista yhdestä tietotyypistä toiseen. On kuitenkin tärkeää huomata, että tietojen muuntaminen kaikista tietotyypeistä toiseen ei ole aina mahdollista. Esimerkiksi voimme muuntaa float-tyypin arvon int-tyypiksi ja päinvastoin. Sen sijaan string-tyypin muuntaminen int-tyypiksi ei ole järkevää eikä siten mahdollista.

Tyyppimuunnoksia on kahta tyyppiä. Yksi niistä on implisiittinen tyyppimuunnos. Implisiittinen tyyppimuunnos tapahtuu, kun Go muuntaa automaattisesti yhden tyypin toiseksi, kun se on turvallista ja yksiselitteistä. Esimerkiksi kun annamme kokonaislukuarvon liukulukumuuttujaan, se käsitellään automaattisesti liukulukuna, koska muunnoksessa ei voi kadota tietoa (10 on sama kuin 10.0):

index.go

index.go

copy
1
var myFloat float32 = 10 // A valid statement

Toinen tyyppimuunnoksen muoto on eksplisiittinen tyyppimuunnos, jossa ohjelmoija muuntaa tietoja tai lausekkeita tietoisesti tyypistä toiseen. Eksplisiittisen tyyppimuunnoksen syntaksi on desiredType(expression), esimerkiksi:

index.go

index.go

copy
12345678
package main import "fmt" func main() { var number1 float32 = 7.9 var number2 int = int(number1) fmt.Println(number2) // Outputs 7 }

Yllä olevassa ohjelmassa muunnetaan float32-arvo int-tyyppiseksi eksplisiittisellä tyyppimuunnoksella. Tämän seurauksena alkuperäisen luvun desimaaliosa jätetään pois, ja vain kokonaisarvo 7 tallennetaan muuttujaan number2. On tärkeää huomata, että tässä tapauksessa osa tiedoista menetetään, erityisesti luvun desimaaliosa (0.9). Teimme kuitenkin tämän valinnan tietoisesti.

Samoin voimme muuntaa rune-tyyppisen arvon string-tyyppiseksi. Runet-luvussa tarkastelimme ohjelmaa, joka tulosti Runen arvon, joka oli numero. Voimme kuitenkin näyttää Runen merkkivastineen muuntamalla sen merkkijonoksi:

index.go

index.go

copy
123456789
package main import "fmt" func main() { var char rune = 'a' fmt.Println(char) // Outputs 97 fmt.Println(string(char)) // Outputs 'a' }

Kuitenkaan emme voi muuntaa string-tyyppiä rune-tyyppiin:

index.go

index.go

copy
12
var myString string = "A string value" fmt.Println(rune(myString)) // Error: cannot convert myString (variable of type string) to type rune

On tärkeää huomata, että emme voi myöskään muuntaa yksittäistä merkkiä sisältävää merkkijonoa rune-tyyppiseksi:

index.go

index.go

copy
1234567
package main import "fmt" func main() { var text string = "a"; fmt.Printf(rune(text)) // Error here }
question mark

Mikä seuraavista on oikea syntaksi tyyppimuunnokselle Go:ssa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 6

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Awesome!

Completion rate improved to 1.96

bookPerustason Tyyppimuunnos

Pyyhkäise näyttääksesi valikon

Tyyppimuunnos tarkoittaa tietojen muuntamista yhdestä tietotyypistä toiseen. On kuitenkin tärkeää huomata, että tietojen muuntaminen kaikista tietotyypeistä toiseen ei ole aina mahdollista. Esimerkiksi voimme muuntaa float-tyypin arvon int-tyypiksi ja päinvastoin. Sen sijaan string-tyypin muuntaminen int-tyypiksi ei ole järkevää eikä siten mahdollista.

Tyyppimuunnoksia on kahta tyyppiä. Yksi niistä on implisiittinen tyyppimuunnos. Implisiittinen tyyppimuunnos tapahtuu, kun Go muuntaa automaattisesti yhden tyypin toiseksi, kun se on turvallista ja yksiselitteistä. Esimerkiksi kun annamme kokonaislukuarvon liukulukumuuttujaan, se käsitellään automaattisesti liukulukuna, koska muunnoksessa ei voi kadota tietoa (10 on sama kuin 10.0):

index.go

index.go

copy
1
var myFloat float32 = 10 // A valid statement

Toinen tyyppimuunnoksen muoto on eksplisiittinen tyyppimuunnos, jossa ohjelmoija muuntaa tietoja tai lausekkeita tietoisesti tyypistä toiseen. Eksplisiittisen tyyppimuunnoksen syntaksi on desiredType(expression), esimerkiksi:

index.go

index.go

copy
12345678
package main import "fmt" func main() { var number1 float32 = 7.9 var number2 int = int(number1) fmt.Println(number2) // Outputs 7 }

Yllä olevassa ohjelmassa muunnetaan float32-arvo int-tyyppiseksi eksplisiittisellä tyyppimuunnoksella. Tämän seurauksena alkuperäisen luvun desimaaliosa jätetään pois, ja vain kokonaisarvo 7 tallennetaan muuttujaan number2. On tärkeää huomata, että tässä tapauksessa osa tiedoista menetetään, erityisesti luvun desimaaliosa (0.9). Teimme kuitenkin tämän valinnan tietoisesti.

Samoin voimme muuntaa rune-tyyppisen arvon string-tyyppiseksi. Runet-luvussa tarkastelimme ohjelmaa, joka tulosti Runen arvon, joka oli numero. Voimme kuitenkin näyttää Runen merkkivastineen muuntamalla sen merkkijonoksi:

index.go

index.go

copy
123456789
package main import "fmt" func main() { var char rune = 'a' fmt.Println(char) // Outputs 97 fmt.Println(string(char)) // Outputs 'a' }

Kuitenkaan emme voi muuntaa string-tyyppiä rune-tyyppiin:

index.go

index.go

copy
12
var myString string = "A string value" fmt.Println(rune(myString)) // Error: cannot convert myString (variable of type string) to type rune

On tärkeää huomata, että emme voi myöskään muuntaa yksittäistä merkkiä sisältävää merkkijonoa rune-tyyppiseksi:

index.go

index.go

copy
1234567
package main import "fmt" func main() { var text string = "a"; fmt.Printf(rune(text)) // Error here }
question mark

Mikä seuraavista on oikea syntaksi tyyppimuunnokselle Go:ssa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 6
some-alt