All is about my experience | Linux

Like Us

19 June 2017

Mengenal Data Type pada Vala



Dalam vala secara garis besarnya terdapat dua tipe data yaitu reference types dan value types
Perbedaanya adalah dari cara pewarisan nilai dari Instance ( Instance adalah.. ) pada Identifier/Variable ( Identifier adalah.. ) baru.

Value Type

Instance dari value type akan disimpan secara langsung didalam Identifier/Variable yang mewakili instance tersebut. Jadi setiap kali value type ditugaskan ke identifier/variable baru maka variable ini akan menggandakan/mengcopy nilai dari instance yang telah ditugaskan tersebut.

Dari itu tiap-tiap variable/identifier akan mengacu pada salinan/copy dari instance yang telah ditugaskan padanya

Setiap konstant yang didefinisikan dengan "const" harus berhuruf kapital

Byte: char, uchar;
Character: unichar;
Integer: int, uint;
Long Integer: long, ulong;
Short Integer: short, ushort;
Guaranteed-size Integer: int8, int16, int32, int64;
Guaranteed-size UnInteger: uint8, uint16, uint32, uint64;
Float number: float, double;
Boolean: bool;
Compound: struct;
Enumeration: enum;


/* atomic types */
unichar c = 'u';
float percentile = 0.75f;
const double MU_BOHR = 927.400915E-26;
bool the_box_has_crashed = false;

/* Mendefinisikan struct */
struct Vector {
    public double x;
    public double y;
    public double z;
}

/* Enum */
enum WindowType {
    TOPLEVEL,
    POPUP
}


Reference Type

Sebaliknya dari Value Type, tiap variable/identifier dari Reference Value tidak menggandakan instance dari Reference yang ditugaskan melainkan variable ini akan mengacu pada Instance dari Reference Value tersebut.

Maksudnya setiap variable/identifier yang mengacu pada Rerefence Type yang sama akan berbagi data/menggunakan data yang sama.

Oiya, kalau instance dari value type tidak disimpan dalam variable lalu dimana instance tersebut berada?
Yup, pertanyaan yang bagus. jawabannya adalah "heap memory" pada RAM

string, array, class-reference, delegate, error;

String

String dalam vala formatnya adalah UTF-8


// String
string ini_string = "Hello, aku adalah string \n";
print (ini_string);

// Membaca input user
print ("Nama kamu: ");
string nama = stdin.read_line ();
print ("Hai, "+nama+"\n");


Array

Array didefinisikan menggunakan []
misal string[], int[], dsb.

// Array
int[] arrayku = {1, 2, 3, 4, 5};

string[] = {"aku index 0", "aku index 1", "aku index 3"};
print (string[0]);

// Multi-dimensional arrays didefinisikan dengan [,] atau [,,] dsb.
int[,] c = new int[3,4];
int[,] d = {{2, 4, 6, 8},
            {3, 5, 7, 9},
            {1, 3, 5, 7}};
d[2,3] = 42;

Class Reference

Class yang dijadikan reference, pada dasarnya setiap class juga adalah reference. Identifier/Variable dari reference yang tidak digunakan akan bernilai "null"


// Membuat class
class ClassBaru {
    public int aku_integer;
    public string aku_string;
    public void ClassBaru () {
        this.aku_integer = 1;
        this.aku_string = "a b c";
    }
}

ClassBaru aku_variable_satu;
ClassBaru aku_variable_dua;

int main () {
    aku_variable_satu = new ClassBaru();
    print (aku_variable_satu.aku_string);
}

/*
    Dalam contoh ini aku_variable_satu adalah ClassBaru;
    Sementara aku_variable_dua adalah "null", mengapa? karena tidak pernah digunakan
*/