> Tutorial LeekScript
Anda telah memutuskan untuk beralih ke mode ketat, dan editor membanjiri Anda dengan berbagai peringatan yang sebelumnya tidak ada. Jangan panik, justru itulah gunanya mode ketat: kurang permisif dan memberi lebih sedikit kebebasan, terutama soal pemberian tipe. Mari kita lihat beberapa kasus peringatan yang umum muncul, untuk memahami dulu apa masalahnya, lalu mencari solusi untuk mengatasinya.
Kasus pertama yang sederhana: saya ingin menyimpan hasil sebuah perhitungan dalam variabel bertipe bilangan bulat.
Masalahnya di sini adalah fungsi sqrt selalu mengembalikan nilai bertipe real, meskipun secara matematis sqrt(4) bernilai 2. Padahal bilangan real tidak muat tanpa kehilangan ke dalam variabel bertipe bilangan bulat: apa yang harus dilakukan dengan desimal sqrt(2), misalnya? Kompilator karena itu meminta Anda membuat pilihan secara eksplisit. Ada beberapa solusi untuk mengatasi peringatan ini:
Kasus lain: saya punya array asosiatif (Map) berisi bilangan bulat yang didefinisikan seperti berikut, dan saya ingin menyimpan sebuah nilai dari array asosiatif ini dalam variabel yang juga bertipe bilangan bulat; seharusnya tipenya cocok...
Mengapa peringatan itu mengatakan mapEntier[0] bertipe «integer?» dan bukan sekadar «integer»? Sebagai pengingat, «?» di akhir sebuah tipe berarti tipe tersebut juga menerima nilai null; ini setara dengan «integer | null». Lalu mengapa array asosiatif saya bisa mengembalikan nilai null, padahal menurut tipenya ia hanya berisi integer? Ketika kita ingin membaca sebuah nilai dalam array asosiatif, kita harus memberinya sebuah kunci, di sini «0» yang ditulis di antara kurung siku; kunci ini harus bertipe sesuai yang didefinisikan dalam array asosiatif, di sini integer, jadi sejauh ini tidak ada masalah. Namun tidak ada yang menjamin kepada editor bahwa kunci tersebut ada dalam array asosiatif, dan jika kita membaca array asosiatif dengan kunci yang tidak ada, hasilnya selalu null. Jadi hasil pengaksesan array asosiatif melalui kuncinya akan selalu nullable. Sekarang mari kita lihat cara mengatasi masalah ini agar tidak ada lagi peringatan:
Dalam kasus ini, saya punya daftar bilangan bulat yang ingin saya urutkan; sekilas tidak ada yang rumit, saya bahkan mengambil contoh dari dokumentasi
Namun saya malah mendapat 2 peringatan pada baris sederhana ini. Mari mulai dari yang pertama: peringatan ini diapit tanda kurung, yang berarti masalahnya ada pada parameter fungsi yang tidak sesuai dengan signature yang diharapkan. Mari lihat dokumentasi arraySort untuk melihat signature-nya: Function real | integer> => Array> Jadi ini adalah fungsi yang mengharapkan 2 parameter: sebuah daftar sebagai parameter pertama, dan sebagai parameter kedua sebuah fungsi yang juga menerima 2 parameter dan mengembalikan bilangan bulat atau real. Sebagai parameter pertama kita memang memberikan sebuah daftar, tidak ada masalah di situ; jadi masalahnya ada pada parameter kedua: kita memberikan fungsi dengan signature Function any>, sedangkan arraySort mengharapkan Function real | integer>; tipe kembaliannya bukan yang diharapkan.
Masalah tipe fungsi callback sudah teratasi; kini tinggal peringatan kedua yang harus diselesaikan. Seperti yang baru saja kita lihat, nilai kembalian fungsi arraySort bukanlah Array\ seperti yang diharapkan untuk variabel kita, melainkan sekadar Array; jadi kita harus melakukan cast nilai kembaliannya secara eksplisit untuk memperbaiki masalah ini.
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.