> LeekScript opplæring
Du har bestemt deg for å gå over til streng modus, og editoren oversvømmer deg med en mengde advarsler som ikke fantes før. Ingen panikk – det er hele poenget med streng modus å være mindre ettergivende og gi mindre frihet, særlig når det gjelder typing. La oss se på noen vanlige advarsler, først for å forstå hva problemet egentlig er, og så for å finne løsninger på det.
Et første, enkelt tilfelle: jeg vil lagre resultatet av en beregning i en variabel av heltallstypen.
Problemet her er at funksjonen sqrt alltid returnerer en verdi av typen real, selv om sqrt(4) matematisk sett er 2. Et reelt tall får ikke plass i en heltallsvariabel uten tap: hva skal man gjøre med desimalene i sqrt(2), for eksempel? Kompilatoren ber deg derfor ta et eksplisitt valg. Det finnes flere løsninger på denne advarselen:
Et annet tilfelle: jeg har et assosiativt array (Map) med heltall definert som nedenfor, og jeg vil lagre en verdi fra dette arrayet i en variabel som også er av heltallstypen – typene burde jo stemme overens...
Hvorfor sier advarselen at mapEntier[0] er av typen «integer?» og ikke bare «integer»? Til minne: «?» på slutten av en type betyr at typen også godtar verdien null; det tilsvarer «integer | null». Så hvorfor skulle det assosiative arrayet mitt kunne returnere null, når det ifølge typen bare inneholder integer? Når man vil lese en verdi i et assosiativt array, må man gi det en nøkkel, her «0» i hakeparenteser; denne nøkkelen må være av typen som er definert for arrayet, her en integer, så alt er i orden så langt. Men ingenting garanterer editoren at nøkkelen finnes i arrayet, og hvis man leser et assosiativt array med en nøkkel som ikke finnes, blir resultatet alltid null. Derfor vil resultatet av et oppslag i et assosiativt array via nøkkel alltid være nullbart. La oss nå se hvordan vi løser dette for å bli kvitt advarslene:
I dette tilfellet har jeg en liste med heltall jeg vil sortere – i utgangspunktet ikke noe komplisert, jeg tar til og med eksempelet fra dokumentasjonen
Likevel får jeg 2 advarsler på denne enkle linjen. La oss begynne med den første: den er omgitt av parenteser, noe som betyr at problemet ligger i funksjonens parametere, som ikke følger den forventede signaturen. La oss se på dokumentasjonen til arraySort for å finne signaturen: Function real | integer> => Array> Det er altså en funksjon som forventer 2 parametere: en liste som første parameter, og som andre parameter en funksjon som også tar 2 parametere og returnerer et heltall eller et reelt tall. Som første parameter gir vi den riktignok en liste, så der er det ingen problemer; det er altså den andre parameteren det er noe galt med: vi sender en funksjon med signaturen Function any>, mens arraySort forventer Function real | integer> – returtypen er ikke den forventede.
Typeproblemet med callback-funksjonen er løst; nå gjenstår den andre advarselen. Som vi nettopp så, er returverdien til arraySort ikke en Array\ slik vi forventer for variabelen vår, men bare Array; vi må derfor caste returverdien eksplisitt for å rette dette.
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.