Dalam konteks type checking, konsep tentang operand dan operator perlu diperluas untuk juga mencakup subprogram dan assignment statement. Subprogram dipandang sebagai operator, dan parameter nya berperan sebagai operand. Simbol yang digunakan pada assignment dipandang sebagai operator, dan target variable serta expression berperan sebagai operand nya.
Dengan demikian, pengertian type checking dapat dinyatakan sebagai aktivitas untuk memastikan bahwa operands dari suatu operator adalah compatible types.
Compatible type diartikan sebagai type yang legal bagi suatu operator, atau diperbolehkan berdasarkan rule dari bahasa pemrograman, untuk dikonversi secara implicit (implicitly converted), oleh compiler-generated code (ataupun interpreter), ke suatu legal type. Implicit atau automatic conversion tersebut biasa disebut coercion. Sebagai contoh pada bahasa Java, jika suatu variable dari tipe int dan suatu variable dari tipe float ditambahkan, maka nilai dari variable tipe int dikonversi secara otomatis (coerced) kepada tipe float, dan dengan demikian proses penambahan dalam floating-point dilakukan.
Type error diartikan sebagai pengaplikasian suatu operator pada suatu operand dari tipe yang tidak semestinya (inappropriate type).
Jika setiap type bindings dilakukan secara statis, maka type checking hampir selalu dapat dilakukan secara statis. Namun, jika type bindings dilakukan secara dinamis, maka type checking harus dilakukan secara dinamis saat run-time.
Bahasa Pemrograman yang Dikatakan Strongly Typed
Suatu bahasa pemrograman dikatakan strongly typed jika type errors selalu terdeteksi. Hal ini mensyaratkan bahwa tipe data dari semua operand dapat ditentukan pada saat compile-time ataupun saat run-time. Hal yang terpenting dari strong typing adalah kemampuan mendeteksi setiap kesalahan penggunaan (misuses) dari variables yang berujung pada type errors.
Bahasa C and C++ tidak termasuk strongly typed, karena keduanya menyediakan union yang tanpa type checked, dan parameter type checking yang dapat diabaikan.
Bahasa ML termasuk strongly typed, meskipun types dari beberapa function parameters tidak dapat diketahui saat compile time. Bahasa F# termasuk strongly typed.
Bahasa Ada termasuk kategori nearly strongly typed karena menyediakan cara untuk menonaktifkan type checking untuk konversi tipe data.
Bahasa Java and C# termasuk strongly typed dalam pengertian yang sama sperti bahasa Ada (nearly strongly typed). Tipe data dapat dikonversi secara explicit (explicitly cast), yang dapat berujung pada type error. Namun, tidak tersedia cara implicit yang menyebabkan type errors menjadi tidak terdeteksi.
Bahasa dengan banyak coercion, seperti C, dan C++, kurang handal (less reliable) dibandingkan dengan bahasa dengan sedikit coercion, seperti Ada, dan yang tanpa coercion, seperti ML and F#. Bahasa Java dan C# mempunyai assignment type coercions yang banyaknya kurang lebih separuh dari bahasa C++, sehingga error detection Java dan C# lebih baik dibanding C++, namun masih belum sebaik bahasa ML and F#.
Comments
Post a Comment