> LeekScript opetusohjelma
Olet päättänyt siirtyä tiukkaan tilaan, ja editori hukuttaa sinut varoituksiin, joita ei ennen ollut. Ei hätää: juuri se on tiukan tilan idea — se on vähemmän salliva ja antaa vähemmän vapauksia erityisesti tyypityksessä. Käydään läpi muutama yleinen varoitustapaus, jotta ymmärrämme ensin, mistä ongelmasta on kyse, ja löydämme sitten keinot korjata se.
Ensimmäinen yksinkertainen tapaus: haluan tallentaa laskun tuloksen kokonaislukutyyppiseen muuttujaan.
Ongelma on siinä, että funktio sqrt palauttaa aina reaalilukutyyppisen arvon, vaikka matemaattisesti sqrt(4) on 2. Reaaliluku ei kuitenkaan mahdu kokonaislukumuuttujaan ilman hävikkiä: mitä tehdä esimerkiksi sqrt(2):n desimaaleille? Kääntäjä vaatii siis tekemään valinnan nimenomaisesti. Varoituksen voi ratkaista usealla tavalla:
Toinen tapaus: minulla on seuraavasti määritelty kokonaislukujen assosiatiivinen taulukko (Map), ja haluan tallentaa yhden sen arvoista niin ikään kokonaislukutyyppiseen muuttujaan. Tyyppien pitäisi kai täsmätä...
Miksi varoitus sanoo, että mapEntier[0] on tyyppiä "integer?" eikä pelkästään "integer"? Muistutuksena: tyypin perässä oleva "?" tarkoittaa, että tyyppi hyväksyy myös null-arvot; se vastaa merkintää "integer | null". Miksi assosiatiivinen taulukkoni siis voisi palauttaa null-arvon, vaikka se tyyppinsä mukaan sisältää vain integer-arvoja? Kun assosiatiivisesta taulukosta halutaan lukea arvo, sille annetaan avain, tässä hakasulkeissa annettu "0". Avaimen on oltava taulukolle määriteltyä tyyppiä, tässä integer, joten siltä osin kaikki on kunnossa. Mikään ei kuitenkaan takaa editorille, että avain on olemassa taulukossa, ja jos assosiatiivista taulukkoa luetaan avaimella, jota ei ole, paluuarvo on aina null. Siksi avaimella tehdyn haun paluuarvo assosiatiivisesta taulukosta on aina nullable. Katsotaan nyt, miten ongelma ratkaistaan, jotta varoituksia ei enää tule:
Tässä tapauksessa minulla on kokonaislukulista, jonka haluan järjestää. Lähtökohtaisesti ei mitään monimutkaista, otan jopa esimerkin suoraan dokumentaatiosta
Saan silti 2 varoitusta tästä yhdestä rivistä. Aloitetaan ensimmäisestä: se on sulkeissa, mikä tarkoittaa, että ongelma on funktion parametreissa, jotka eivät vastaa odotettua allekirjoitusta. Katsotaan arraySortin dokumentaatiosta sen allekirjoitus: Function real | integer> => Array> Kyseessä on siis funktio, joka odottaa 2 parametria: ensimmäisenä listan ja toisena funktion, joka sekin ottaa 2 parametria ja palauttaa kokonais- tai reaaliluvun. Ensimmäisenä parametrina annetaan kyllä lista, siinä ei ole ongelmaa, joten vika on toisessa parametrissa: annetaan funktio, jonka allekirjoitus on Function any>, kun arraySort odottaa allekirjoitusta Function real | integer>. Paluutyyppi ei ole odotettu.
Callback-funktion tyypitysongelma on ratkaistu; jäljellä on vielä toinen varoitus. Kuten edellä nähtiin, arraySort-funktion paluuarvo ei ole muuttujallemme odotettu Array\ vaan pelkkä Array, joten paluuarvo on muunnettava nimenomaisesti ongelman korjaamiseksi.
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.