Programming Language Concept

One Stop Computer Science

Archive for October, 2017

Session IV: Data Types

Introduction

Data Type adalah sebuah koleksi data dari objek dan sebuah set dari operasi yang telah ditentukan terhadap objek tersebut.

Descriptor adalah koleksi dari atribut sebuah variabel.

Sebuah objek mewakili contoh dari sebuah tipe user-defined (abstract data).

Primitive Data Types

Hampir seluruh bahasa pemrograman menyediakan primitive data types. Contoh Primitive Data Types adalah integer, floating point, complex, decimal, boolean, character.

Character String Types

Nilainya merupakan sekumpulan karakter. Contoh: assignment and copying, comparison, catenation, substring reference, dan pattern matching.

Implementation:

  • Static length: compile-time descriptor
  • Limited dynamic length: membutuhkan run-time descriptor untuk length.
  • Dynamic length: membutuhkan run-time descriptor; alokasi/dealokasi merupakan masalah terbesar dalam implementasi.

User-Defined Ordinal Types

Ordinal type memiliki jangkauan yang dapat dengan mudah dikaitkan dengan sebuah set dari integer positif. Contoh: integer, char, boolean.

Enumeration Types

Semua nilai yang memungkinkan (named constants) dapat dimengerti. Contoh: enum days {mon, tue, wed, thu, fri, sat, sun};

Keuntungan menggunakan Enumerated type:

  • readability: tidak diperlukan untuk mengkode warna sebagai angka.
  • reliability: compiler dapat memeriksa: operasi (tidak mengijinkan warna untuk ditambahkan), tidak ada enumeration variable yang dapat mendaftarkan nilai diluar jangkauannya.

Subrange Types

Subrange types adalah tipe data yang terdiri atas data yang berasal dari data type lain dalam jangkauan. Contoh:

type Days is (mon, tue, wed, thu, fri, sat, sun);

subtype Weekdays is Days range mon..fri;

subtype Index is Integer range 1..100;

Day1: Days;

Day2: Weekday;

Day2 := Day1;

Keuntungan:

  • readability: menjelaskan kepada pembaca bahwa variabel dari subrange hanya dapat menyimpan dalam jangkauan tertentu.
  • reliability: nilai yang berada diluar jangkauan tertentu akan menyebabkan error.

Implementasi dari User-Defined Ordinal Types

  • Enumeration types diimplementasikan sebagai integer
  • Subrange types diimplementasikan seperi tipe induk dengan kode yang dimasukan oleh compiler untuk memberi jangkauan kepada subrange variables.

Decimal Data Types

Keuntungannya adalah dapat menyimpan nilai desimal dengan tepat dalam kisaran terbatas yang tidak dapat dilakukan oleh floating point. Kelemahannya ialah nilai dibatasi karena tidak ada eksponen dan memakan agak banyak memori.

Nilai desimal disimpan seperti karakter string (menggunakan kode biner untuk setiap digit desimal). Hal ini disebut binary coded decimal (BCD). Terkadang BCD disimpan satu digit per byte namun terkadang pula disimpan dua digit per byte. Hal ini menyebabkan nilai desimal memakan lebih banyak memory dibandingkan binary (paling sedikit membutuhkan empat bits untuk mengkode sebuah digit desimal, sedangkan untuk angka yang sama, binary hanya membutuhkan 20 bits.

Type Checking

Type checking adalah aktifitas yang memeriksa apakah operands dari sebuah operator sesuai dengan data type yang digunakan. Compatible type adalah operator yang sesuai ataupun yang dibawah aturan bahasa dapat dikonversi oleh compiler-generated code menjadi legal type. Type error adalah kesalahan yang disinyalir oleh operator kepada operand dari tipe yang tidak sesuai.

Static Type Checking and Dynamic Type Checking

Static type checking dapat menemukan kesalahan mengetik pada awal development cycle, dapat mengkompilasi (compile) lebih cepat karena kompiler mengetahui data type yang digunakan, lebih teliti (dapat mendeteksi type error yang sulit ditemukan), menghasilkan kode yang lebih optimal.
Sedangkan pada dynamic type checking, dapat terjadi run time error dikarenakan type error dan menghasilkan kode yang kurang optimal.

Strong Typing

Aturan coercion sangat berpengaruh terhadap strong typing. Aturan coercion adalah koversi atau perubahan nilai (operand dari sebuah operator) ke data type (legal type dari compiler-generated code) lain secara implisit yang dilakukan secara otomatis.
Contoh: sebuah variabel int dan float 6.13 Strong Typing 303 variable ditambahkan di Java, maka nilai variabel int akan dipaksa berubah menjadi float dan ditambahkan floating point. Aturan coercion sangat melemahkan strong typing. Aturan coercion mengurangi kemampuan mendeteksi type error dari kompiler. Aturan coercion merupakan konversi otomatis ke sebuah legal type operand dari sebuah operator yang artinya legal type tidak akan dibaca sebagi type error.
Contoh: jika sebuah program memiliki a dan b sebagai variabel int dan d sebagai variable float. Sang programmer ingin mengetik a + b namun secara tidak sengaja mengetik a + d, kesalahan ini tidak akan dideteksi oleh compiler. Nilai a akan dipaksa berubah menjadi float. Sehingga, nilai strong typing akan dilemahkan oleh coercion.

  • 0 Comments
  • Filed under: Uncategorized
  • 1. Names

    Jika terlalu pendek, nama tidak dapat memiliki arti.

    Contoh bahasa:

    • C#, Ada, dan Java tidak memiliki limit dan semuanya signifikan.
    • C++ tidak memiliki limit namun dalam pelaksanaan biasanya memaksa.

    Karakter spesial:

    • PHP: semua nama variabel harus diawali tanda dollar ($).
    • Perl: semua nama variabel harus diawali karakter spesial yang menjelaskan tipe variabel.
    • Ruby: nama variabel yang diawali dengan @ adalah contoh variabel; yang diawali dengan @@ adalah kelas variabel.

    Case sensitive

    Nama di C merupakan case sensitive. Kerugiannya adalah readability (nama yang serupa tapi tidak sama, contoh: a dengan A berbeda).

    Special words

    Bantuan untuk readability; digunakan untuk membatasi pernyataan klausa.

    Reserved word adalah special word yang tidak digunakan sebagai nama. Potensi masalah menggunakan reserved word adalah jika terlalu banyak, banyak terjadi bentrokan (contoh: COBOL memiliki 300 reserved words).

    Variabel

    Variabel adalah abstraksi dari sel memori. Variabel terdiri dari enam atribut, yaitu:

    • Name
    • Address
    • Value
    • Type
    • Lifetime
    • Scope

    2. Bindings

    Binding adalah sebuah gabungan antara entitas dan atribut, seperti antara sebuah variabel dan tipe atau nilainya, atau antara operasi dan sebuah simbol.

    Possible binding times:

    • Language design time: menggabungkan simbol operator ke operasi
    • Language implementation time: menggabungkan floating point type ke sebuah representasi
    • Compile time: menggabungkan variabel ke sebuah type di C atau Java
    • Load time: menggabungkan C atau C++ static variable ke sebuah sel memori
    • Runtime: menggabungkan nonstatic local variable ke sebuah sel memori.

    Dynamic Type Binding

    Digunakan pada JavaScript, Phyton, Ruby, PHP, dan C#.

    Keuntungan: Flexibility

    Kerugian: Type error sulit dideteksi oleh compiler dan memakan banyak memori.

    Kategori variabel berdasarkan lifetime:

    • Static bound: mengikat sel memori sebelum eksekusi dilakukan dan tetap mengikat sel memori yang sama saat eksekusi. Keungtungan: efisien, history-sensitive; kerugian: kurang fleksibel.
    • Stack dynamic: ikatan penyimpanan dibuat untuk variabel ketika deklarasi pernyataannya diuraikan. Keuntungan: rekursi diperbolehkan, menghemat penyimpanan; kerugian: alokasi dan dealokasi mengalami overhead, subprogram tidak dapat menjadi history sensitive, acuan kurang efisien.
    • Explicit heap dynamic: Alokasi dan dealokasi dengan arahan eksplisit (diterangkan oleh programmer) yang bereaksi saat eksekusi. Keuntungan: Menyediakan dynamic storage management; kerugian: kurang efisien dan kurang dapat diandalkan.
    • Implicit heap dynamic: alokasi dan dealokasi disebabkan oleh assignment statements. Keuntungan: fleksibel; kerugian: kurang efisien (karena semua atributnya dynamic) dan hilangnya error detection.

    3. Scope

    Scope dari sebuah variabel adalah jangkauan dari pernyataan yang kelihatan. Local variables dari sebuah program adalah semua yang dideklarasikan dalam unit tersebut, sedangkan nonlocal variables dari sebuah program adalah semua yang kelihatan dalam unit tersebut namun tidak dideklarasikan. Global variables adalah kategori spesial dari nonlocal variables. The scope rules dari sebuah bahasa menentukan bagaimana acuan nama terkait dengan variabel.

    Static Scope

    Berdasarkan program text. Untuk menghubungkan naam dengan acuan kepada sebuah variabel, compiler harus menemukan deklarasi terlebih dahulu.

    Search process: mencari deklarasi, awalnya lokal, kemudian menyebar ke lampiran yang lebih luas hingga akhirnya ditemukan untuk sebuah nama.

    Enclosing static scopes disebut static ancestors; static ancestor yang terdekat disebut static parent.

    Global Scope

    C, C++, PHP, dan Phyton mendukung sebuah struktur program yang terdiri dari sebuah urutan fungsi yang didefinisikan dalam file. C dan C++ memiliki deklarasi dan definisi.

    Static Scoping

    Bekerja dengan baik di banyak situasi. Masalahnya: dalam kebanyakan kasus, terlalu banyak akses yang mungkin terjadi dan sebagai program yang berkembang, struktur awal dihancurkan dan local variables terkadang menjadi global; subprogram juga tertarik menjadi global dibandingkan nested.

    Dynamic Scope

    Didasarkan oleh panggilan urutan dari sebuah unit program, bukan textual layout. Mengacu kepada variabel yang terhubung dengan deklarasi untuk pencarian panggilan ikatan subprogram yang terpaksa dieksekusi pada bagian ini.

    Contoh:

                      function big() {

    function sub1()

    var x = 7;

    function sub2() {

    var y = x;

    }

    var x = 3;

    }

    –Static scoping

    • Reference to x in sub2 is to big’s x

    –Dynamic scoping

    • Reference to x in sub2 is to sub1’s x
  • 0 Comments
  • Filed under: Uncategorized