Skip to main content

Pengertian Type Checking dalam Bahasa Pemrograman

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

Popular posts from this blog

Pengertian Binding dalam Bahasa Pemrograman dan Kapan Terjadinya

Binding dimaksudkan sebagai pengikatan (association) antara suatu entity dengan atributnya, misalnya binding/pengikatan antara suatu variable dengan tipe datanya atau dengan nilainya, atau dapat juga antara suatu operasi dengan simbol, misalnya simbol + dikenali sebagai operasi penjumlahan atau simbol ^ dikenali sebagai operasi pangkat, dll.  Peristiwa binding dan kapan terjadinya binding (biasanya disebut dengan binding time ) berperan penting dalam membicarakan semantics suatu bahasa pemrograman. Beberapa kemungkinan binding time adalah:

Latihan Soal Jawab Matematika Diskrit

Berikut di bawah ini adalah latihan soal jawab untuk matematika diskrit dengan topik-topik: Pernyataan Logika Circuits dan Ekspresi Boolean Argumen (valid/tidak valid) Teori Himpunan Permutasi Fungsi --o0o-- Pernyataan Logika 1. Buatlah tabel kebenaran untuk menentukan yang mana tautology dan yang mana contradiction dalam pernyataan logika (a) dan (b) di bawah ini: a. (p ∧ q) ∨ (∼p ∨ (p ∧ ∼q)) b.  (p ∧ ∼q) ∧ (∼p ∨ q)

Contoh proses normalisasi relasi dari UNF – 1NF – 2NF – dan 3NF

Dalam posting tulisan tentang: “Tujuan dan Manfaat Normalisasi dalam Perancangan Database” , kita sudah mempelajari tentang: “Apa itu normalisasi” dan “Mengapa kita perlu melakukan normalisasi”. Kedua pertanyaan itu sudah terjawab dalam tulisan tersebut.  Kemudian dalam posting tulisan tentang: “Konsep Ketergantungan Fungsional, Normalisasi, dan Identifikasi Primary Key dalam Perancangan Sistem Database” , kita sudah mempelajari suatu konsep penting yang digunakan untuk melakukan normalisasi, yaitu konsep ketergantungan fungsional yang terdiri dari ketergantungan penuh, ketergantungan parsial atau sebagian, dan ketergantungan transitif. Proses normalisasi pertama-tama dilakukan dengan mengidentifikasi adanya ketergantungan-ketergantungan tersebut dalam relasi-relasi dan kemudian menghilangkannya. Cara melakukan normalisasi, mengidentifikasi berbagai macam ketergantungan, dan menghilangkan ketergantungan pada relasi-relasi bisa dipelajari ulang dalam postingan tulisan di at