Tuesday, June 1, 2010

Who knows you on website??

Udah lebih dari Setahun lamanya ngga pernah bersentuhan sama Blog....
hari ini coba iseng-iseng login...tapi bingung mau nulis apa...
1 menit...
2 menit...
15 menit...

masih blom ada ide jugs mau nulis apa...sambil ngelamun coba-coba ketik nama sendiri di search box google...eh taunya muncul beberapa artikel....liat punya buka(hehehehe)... eh ternyata ada beberapa artikel yang tentang diri kita sendiri...trus dengan penuh ke GR an di dalam hati, gue ngeguman (tau ngga lo ngegumman...sotoy mode on)....wah ternyata cukup terkenal juga yah gue bisa ada di artikel web (tentu ajah selain facebook yah sobh....wakakaka)

Jadi coba deh lo lakukan hal yang sama seperti yang baru aja gue lakukan(ngga penting sehhh)... tapi seru juga loh ternyata.....

Cek ki dot beberapa link tentang gue yang berhasil gue temuin....
1. Ini linknya ANU...banga juga yah ada yang masukin nama gue secara otomatisss

2. Kalo ini link tentang seminar dan abstrack gue

3. Wah ini link udah 2 tahun yang lalu...tapi masih exist juga...walaupun cuma nyebut nama gue sebaris doank, tapi lumayan donk masuk berita...hehehehe....check news yang titlenya :"Save me, Snackbot"

4. Bhoooooo ini dia nih link yang bikin bangga....list of PhD student in CSIRO.....

5. Eh ada bapak supervisor....ternyata gue diakuin juga jadi siswanya aminnnnn....

6. Yang ini bener2 ngga disangka ada...Special thanks for Net traveller...for comment in my topic research...

7. Halah gue masuk listnya orang-orang CECS, tapi knp ditulis posgraduate student yah, bukan PhD student...ada yang tau bedanya??

8. Hi5 chinnnn...ngga pernah gue buka lagi

9. Makasih buat Dodok dah bersedia menyebutkan nama gue di blognya walaupun ngga penting T_T

10. Masih aktive kah forum kita tercinta ini??

11. ini satu lagi demen-demennya sama Ruby on Rails nieh...thanks for Mr Edy Gunawan

12. The best student chinnn...ngga nahan itu foto jadi melebar gitu...gimana ini Bapak Lie Jasa....

13. Salah ngetag Rumah orang nih kayaknya gue...mahap Pak/Bu...

14. Kok bisa ada link nama gue yah di web ini...tuing...tuing...Heran...

15. Ckckckck...ternyata gue tercatat menerima beasiswa juga toh dari Dikti...ngga nyangka...uangnya gue pake belanja apa ya??tuing....tuing...tuing...

16. Twiiiiiiiittteeeerrrrr

17. Forgetable link website...kapan gue iseng buat web ini yah...keren juga walau berantakan

18. Satu lagi yang terlupakan...ada foto gue jaman dodol cing

19. Multiply juga ngga mau ketinggalan rupanya...

20. Skripsi gue chinnnn

21. eh blogger gue juga jangan lupa

22. ya ampyunnn...gue lupa pernah submit abstrack di mari...mahap kelewatan

23. yah ini link dah lama banget kayaknya...thanks for Riza buat diupdatenya halaman ini...(*nyindir)

24. The last but not least...facebooooooookkkkkkk....mantabss...dah cape gue liatnya

yah itu diatas beberapa link yang berhasil gue ciduk dari uncle google....how bout u guys? who knows you on website??

Monday, August 25, 2008

Linden Scripting Language (Versi. Indonesian)

Definisi Linden Script Language

Linden Scripting Language atau disingkat dengan LSL adalah sebuah bahasa pemrograman yang digunakan Resident/pengguna Second Life. LSL script digunakan untuk mengatur logika dan tingkah laku objek atau benda di dalam dunia virtual Second Life. LSL memiliki persamaan sintak dengan bahasa C atau JAVA. LSL memungkinkan sebuah objek/benda untuk berinteraksi dengan dunia Second Life dan dunia internet dengan menggunakan email, HTTP request, dan baru-baru ini dengan XML-RPC

Linden Scripting Language atau LSL adalah sebuah bahasa pemrograman yang berbasiskan state-event (bekerja dangan mengendalikan event-event yang terjadi) dan bekerja pada state/keadaan tertentu. Sebuah script terdiri dari variabel-variabel, fungsi definition (fungsi yang dibuat dengan logika sendiri), fungsi library LSL, dan satu atau lebih yang dinamakan dengan “state”. Suatu state menggambarkan bagaimana menjalankan event-event yang terjadi ketika program berada di dalam suatu state/keadaan tertentu (salah satu contoh event : saat benda mulai disentuh – touch start event, waktu, pergerakan, chat (dari sesama avatar), email, tubrukan (dengan benda lain atau dengan avatar). Kemudian sistem akan mengirimkan event (kejadian yang terjadi saat itu) ke dalam script. Selain itu suatu script dapat mengatur banyak aspek dari state/keadaan suatu benda seperti berkomunikasi dangan benda lain ataupun dengan avatar. Cara untuk mengeksekusi script yang kita buat adalah dengan memasukkannya kedalam sebuah benda didalam SL.

Sebuah script lebih menggambarkan konsep kerja dari objek dan bukan sekedar object oriented. Sebuah objek dalam Second Life dapat merepresentasikan sesuatu seperti sebuah kursi, atau tembok atau mugkin saja suatu benda yang tidak terlihat. Script dapat dimasukkan didalam benda dimana script tersebuat akan dijalankan terus menerus.

LSL menyediakan lebih dari 300 fungsi library. Pengguna juga dapat mendefinisikan dan menambahkan sendiri fungsi-fungsi ke dalam program atau script yang dibuat. LSL merupakan sebuah bahasa pemrograman yang dikompile terlebih dahulu kedalam byte code sebelum dieksekusi didalam mesin virtual pada salah satu server Linden Lab.

LSL memiliki struktur data (tipe data) seperti bahasa pemrograman lain meliputi “integer”, “float” = floating point number, “strings”, “key” (UUID), “vectors” (digunakan untuk koordinat 3D dan warna RGB), dan “rotations” (digunakan untuk fungsi quaternions). LSL juga menggunakan tipe data “list” yang bekerja menyerupai tipe data array. Dalam SL tidak bisa membuat/menggunakan tempat penyimpanan data seperti file atau database yang dapat dimanfaatkan di dalam script untuk menyimpan data sehinga tidak memungkinkan pengguna untuk menyimpan data dalam jumlah besar. Selain itu SL memiliki kelebihan yaitu script yang berada pada objek yang ada di SL dijalankan terus menerus walaupun pengguna yang membuatnya tidak berada (logged in) dalam SL.

Second Life menyediakan tempat penyimpanan (inventory) pada setiap avatar untuk menyimpan objek (dalam salah satu servier yang disediakan Linden Lab sehingga dapat kita gunakan kapan pun dan dimana pun bila kita logged in di dalam SL) dan bila objek tersebut dimasukkan lagi kedalam Second Life maka script yang berada didalamnya dapat bekerja kembali sama seperti sebelum disimpan. Sebagai tambahan, mekanisme untuk komunikasi dengan menggunakan HTTP dapat digunakan untuk menyimpan state di luar Second Life.

Beberapa fungsi dalam LSL bekerja dengan delay yang berjalan diantara 0.2 detik untuk fungsi menggerakan objek non-fisikal sampai 20 detik ketika menggunakan fungsi untuk mengirim pesan dengan email. Delay ini sengaja dibuat untuk membantu mencegah pengguna dalam menulis script yang dapat menggangu sumber sistem SL.

2.1 Constants (konstanta)

Suatu konstanta merupakan nilai yang sudah didefinisikan sebelumnya dan tidak dapat diubah atau selalu konstan. Seperti TRUE selalu bernilai 1. Akan tetapi ini tidak selalu berarti harus digunakan. Jika tidak ada alasan teknikal khusus. Konstanta hadir untuk memudahkan dalam penulisan pengkodean dan mempermudah untuk mengerti.

Dibawah merupakan daftar beberapa konstanta yang digunakan dalam LSL :

Tabel Konstanta dalam bentuk float

PI

3.1415926535897932384626433832795 (pi)

TWO_PI

6.283185307179586476925286766559 (pi * 2)

PI_BY_TWO

1.5707963267948966192313216916398 (pi / 2)

DEG_TO_RAD

Untuk mengkonversi dari degrees menjadi radians (mengalikan, contoh: radian = 90 * DEG_TO_RAD;)

RAD_TO_DEG

Untuk mengkonversi dari radians menjadi degrees (mengalikan, contoh: degree = PI_BY_TWO * RAD_TO_DEG;)

SQRT2

1.4142135623730950488016887242097 (Akar kuadrat)


Tabel Konstanta dalam bentuk integer

TRUE

1, sebuah integer konstanta untuk boolean operator.

FALSE

0, sebuah integer konstanta untuk boolean operator.

DEBUG_CHANNEL

2147483647, channel spesial yang digunakan untuk di print untuk tampilan Windows Script Error.

Konstanta dalam bentuk string

NULL_KEY menunjukkan null key:

"00000000-0000-0000-0000-000000000000". EOF, "/n/n/n", menunjukan akhir dari sebuah garis dari notecard.

Tabel n Konstanta dalam bentuk string

Substring

Mengantikan

\t

Empat spasi

\n

Garis baru

\"

Tanda petik

\\

Garis miring

Konstanta dalam bentuk rotation

ZERO_ROTATION <0.0,>

(Catatan untuk ZERO_ROTATION adalah bukan <0.0,>! Penting.)

Konstanta dalam bentuk vector

ZERO_VECTOR <0.0,>

2.2 Events (Kejadian)

LSL adalah sebuah bahasa pemrograman yang mengatur kejadian. Secara harfiah skrip merupakan kumpulan kode yang dipicu ketika suatu kejadian yang sedang terjadi. Skrip dapat menyediakan kontrol event (event handlers) seperti moving_end atau touch_start. Jika sebuah skrip menyediakan sebuah kontrol event , dan sebuah keadaaan terjadi sesuai dengan kontrol event , simulator akan menambah keadaan tersebut kedalam antrian keadaan pada script

Skrip kontrol event akan dipanggil dalam perintah keadaan diantrian (FIFO). Antrian keadaan bisa menampung sampai 64 keadaan. Jika sebuah antrian keadaan diisi, maka skrip tidak akan menghiraukan keadaan baru. Perlu diingat LSL bukan merupakan multi-threaded (banyak jalur). Hanya satu keadaan yang dapat dijalankan pada suatu waktu tertentu. Suatu keadaan yang terjadi tidak dapat mengganggu satu sama lain. Tidak ada cara untuk dapat berinteraksi sesara langsung dengan antrian keadaan.

Mengganti states adalah suatu cara untuk menghapus antrian event. Beda state dapat memiliki kontrol event yang berbeda. Sebagai contoh ketika sebuah pengatur keadaan pada script dijalankan, semua argumen untuk keadaan tersebut dilewati oleh nilai. Dan menempatkan pada keadaan stack. Jika sebuah skrip tidak memiliki memori yang cukup untuk menampung semua argumen, skrip akan berada dalam keadaan stack dan tidak ada satu kode pun dalam pengontrol keadaan yang akan dijalankan.

Tidak seperti fungsi, tidaklah mungkin untuk pembuat script untuk membuat pengontrol keadaan sendiri. Jika kita ingin memeriksa apakah sesuatu telah terjadi atau tidak, dan tidak dapat diatasi oleh suatu kontrol event , maka kita membutuhkan timer() event.

2.3 Flow Control

Flow control adalah istilah pemrograman yang menggambarkan ketika sebuah kode berjalan diatur dengan suatu ketentuan tertentu. kata kunci dibawah merupakan bagian dari flow control dalam LSL.

Tabel n Macam-macam flow control

Kata kunci

Tujuan

if-else

Menjalankan suatu pernyataan/kode jika sebuah kondisi bernilai benar dan menjalankan pernyataan lainnya pada kondisi sebaliknya.

while

Menjalankan pernyataan selama kondisinya benar.

do-while

Menjalankan pernyataan minimal sekali selama kondisinya benar.

for

Menjalankan pernyataan dengan jumlah/waktu tertentu.

jump

Berpindah ke bagian lain dari sebuah fungsi atau event (keadaan).

return

Keluar dari fungsi atau event dan memungkinkan untuk mengembalikan nilai.

state

Transisi dari suatu state ke state lainnya dalam satu script.

1. “If-Else”

Mengeksekusi suatu pernyataan jika (if) sebuah kondisi bernilai benar (true) dan menjalankan pernyataan lainnya jika kondisinya salah (else - false)

Format:

if (condition)
        statement
else
        statement
 
if (condition)
{
        statements
}
else
{
        other statements
}

· Else dan statemen didalamnya merupakan pilihan yang tidak harus ada.

· Jika hanya terdapat hanya satu statemen didalam sebuah kode blok tanda kurung kurawal juga merupakan pilihan dan tidak harus dituliskan.

2. “while” Loops

Pernyataan dalam flow control while loop di jalankan berulang-ulang jika sebuah kondisi dijalankan.

Format :

while (condition) 
{
        statements
}

Catatan : jika kondisi bernilai false, maka pernyataan didalamnya tidak akan pernah dijalankan. Contoh kode dibawah ini akan menunggu sampai sampai lewat dari 3600 detik dari hari dimulai dalam SL

integer bDone = FALSE;
 
while (!bDone)
{
    if (llGetTimeOfDay() > 3600)
    {
        bDone = TRUE;
    }
    else
    {
        llSleep(500);
    }
}
llSay( 0, "Good morning!" );

3. “Do-While”

Kata kunci do-while akan melakukan perulangan yang serupa dengan while loop, akan tetapi perintah yang diberikan untuk dijalankan berbeda.

Format

do
{

statements

} while (condition);

Contoh :

do
{
    llSay(0, "monkey!");
} while (monkeysRemain());

contoh kode diatas akan mengeluarkan kata “monkey” minimal sekali dan akan berlanjut selama fungsi dari monkeysRemain() bernilai benar (TRUE), dalam perulangan mengunakan do-while, pernyataan yang diulang akan dijalankan minimal satu kali baru kemudian kondisi di periksa dan jika bernilai benar maka akan kembali menjalankan pernyataan tersebut berulang-ulang..

4. “for”

Perulangan menggunakan “for” digunakan untuk menjalankan pernyataan ketika sebuah kondisi bernilai benar, dan menjalankan perulangan dari awal sesuai dengan nilai yang ada setelah melakukan satu kali iterasi/putaran. Biasanya digunakan sebuah angka untuk membatasi perulangan pada setiap waktunya.

Format:

for (initialization; test; update)
{
    statements
}



Contoh :

integer x;
list things = ["apple", "venus", "Volume 1"];
integer length = llGetListLength(things);
 
for (x = 0; x < length; x++)
{
    llSay(0, llList2String(things, x));
}
 

5. ”jump label.

Kata kunci “jump” bekerja seperti “goto” pada bahasa pemrograman lain. Jump dapat digunakan sebagai salah satu bentuk flow control. Ketika sebuah jump terjadi, script sesegera mungkin akan bergerak menjalankan pernyataan berikutnya dimana label dari jump didefinisikan, melewatkan beberapa kode dan dapat memecah perulangan yang terjadi.

Label di definisikan dengan bebas dan dapat diubah dan diawali dengan prefiks karakter @ (simbol “at”)

Contoh :

list gList;
integer scanForThingys(){
   integer i;
   integer len = llGetListLength(gList);
   for (i = 0; i < len; i++){
      if ( isThingy( llList2String(gList, i) ) )
         jump getOut;
   }
   i = -1;
   @getOut; // when the jump is executed this script leaves the FOR loop and continues from here
   return i;
}

Catatan : fungsi jump hanya dapat bekerja pada cakupan tertentu, sebuah fungsi global atau dalam sebuah event handler (kontrol event ). Dan tidak bekerja antara global fungsi atau event handler (kontrol event ).

Kebanyakan para pembuat kode untuk menghindari menggunakan “jump” jika memungkinkan dan bisa dilihat hampir diseluruh bahasa pemrograman fungsi ini tidak di gunakan. LSL tidak memiliki kata kunci/fungsi “break” yang merupakan standard dalam bahasa pemrograman lain untuk keluar dari sebuah perulangan. Oleh sebab itu fungsi jump dapat digunakan sebagai pengganti fungsi tersebut.

6. “return”

Kata kunci “return” berfungsi untuk mengembalikan nilai ketika meninggalkan sebuah fungsi atau event. Kata kunci “return” digunakan untuk keluar dari sebuah fungsi atau event dengan mengembalikan sebuah nilai. Sebagai catatan, nilai kembali akan didapatkan ketika kita menjalankan sebuah fungsi yang mempunyai nilai kembali.

Contoh :

MyGlobalFunction(string str) {
    llSay(0, str);
}
 
float WithReturnValue() {
    float    r;
 
    r = llFrand(10);
    return r;    // mengembalikan nilai r;
}
 
default {
    touch_start(integer total_number) {
        if ( llDetectedKey(0) != llGetOwner() ) return; 
// keluar dari event ketika benda disentuh oleh orang asing
 
        MyGlobalFunction("Hooray for SL!"); 
// memanggil fungsi tanpa mengembalikan sebuah nilai
 
        llSay(0, (string)WithReturnValue()); 
// memanggil fungsi dan menggunak nilai kembalinya
 
            }
}

7. “state”(kata kunci-untuk berpindah state)

Kata kunci ini digunakan untuk berpindah dari suatu state ke state lainnya dalam sebuah script. Dan juga digunakan untuk mendefinisikan sebuah state baru. State akan berganti keadaan walaupun demikian memungkinkan untuk bertransisi/berpindah dari dalam sebuah fungsi yang bisa kita definisikan sendiri.

Contoh :

default
{
   touch_start(integer detectedCount)
   {
      llOwnerSay( "Transitioning to the foo state.");
      state foo;
   }
}
 
state foo
{
   touch_start(integer detectedCount)
   {
      llOwnerSay( "Transitioning back to the default state.");
      state default;
   }
}
 

2.4 Functions (Fungsi)

Sebuah fungsi dapat dipikirkan sebagai sebuah mesin yang masukannnya disediakan dan mengeluarkan output. Dengan menggunakan fungsi, kode yang berada pada sebuah blok yang sama dapat digunakan berulang-ulang.

LSL menyediakan lebih dari 310 fungsi bawaan yang mengizinkan skrip dan objek untuk berinteraksi di dalam lingkungan Second Life. Semua fungsi bawaan ini diawali dengan huruf “ll” yang merupakan singkatan dengan huruf kecil dari Linden Library.

Pengguna juga dapat mendefinisikan fungsi sendiri seperti halnya fungsi bawaan selama nama dari fungsi buatan tersebut tidak mengalami konflik dengan konstanta bawaan, ataupun fungsi bawaan.

2.5 Operators

Dalam matematika, sebuah operator adalah sebuah symbol yang mengekspresikan operasi untuk melakukan. Dalam LSL, operator memperlihatkan bentuk operasi biasa yang sederhana untuk nilainya. Assignment operator selalu diletakkan disebelah kiri dari operasi haruslah variabel.

Tabel Tipe Opeator

Operator Types

Deskripsi

Contoh

Unary

Operator yang dipakai untuk satu nilai

++, --, ~, !

Binary

Operator yang dipakai untuk dua nilai

+, -, *, /, %, +=, -=, *=, /=, %=, &&, ||, !, ==, !=, <=, <, >=, >

Boolean

Operator yang bekerja dengan memberikan nilai TRUE dan FALSE.

&&, ||, !, ==, !=, <=, <, >=, >

Bitwise

Operator yang bekerja pada bit

&, |, ~, ^, <<, >>

Assignment

Operator sepesial yang menandai nilai untuk varibel.

=, +=, -=, *=, /=, %=

Seluruh operator di eksekusi dengan urutan dari teratas terlebih dahulu

Tabel n Tabel Operasi

Operasi

Deskripsi

() [] .

Tanda kurung, Kurung kotak dan operator titik

! ~ ++ --

NOT, Complement, penambahan satu, pengurangan satu.

* / %

Perkalian, pembagian, Modulus (% juga untuk perkalian cross/silang vector)

+ -

Penambahan, pengurangan

<< >>

Geser kiri, geser kanan

< <= > >=

Kurang dari kurang dari sama dengan, lebih dari, lebih dari sama dengan

== !=

Perbandingan samadengan, perbandingan tidak sama dengan

&

Bitwise AND

^

Bitwise XOR

|

Bitwise OR

&&

Perbandingan AND

||

Perbandingan OR

= += -= *= /= %=

Assignment

2.5.1 Assignment

Operator aritmatika yang biasa digunakan adalah assignment, ditunjukan dengan symbol “=”. Banyak pengertian sesuai dengan tanda yang ada disebelah kanan dari tanda “=” adalah operator dan sebelah kiri oprator haruslah variabel.

Tipe dari nilai haruslah sesuai dengan tipe yang sudah dideklarasikan pada variabel atau compiler tidak akan mau membacanya. Bila berbeda dapat digunakan proses typecast untuk menyamakan. Semua tipe dasar didukung oleh operator “=”.

Contoh :

// variables to hold a information about the target
key g_target;
vector g_target_postion;
float g_target_distance;
 
// function that demonstrates assignment
set_globals(key target, vector pos)
{
    g_target = target;
    g_target_position = pos;
 
    // assignment from the return value of a function
    vector my_pos = llGetPos(); 
    g_target_distance = llVecDist(g_target_position, my_pos);
}

Catatan: Seperti kebanyakan bahasa pemrograman, LSL mendukung kombinasi o Tabel n Konstanta dalam bentuk float

Tabel n Operator assignment dengan binary.

Operator

Syntax

Description

+=

var1 += var2

Memberikan nilai var1 + var2 pada variabel var1.

-=

var1 -= var2

Memberikan nilai var1 - var2 pada variabel var1.

*=

var1 *= var2

Memberikan nilai var1 * var2 pada variabel var1.

/=

var1 /= var2

Memberikan nilai var1 / var2 pada variabel var1.

%=

var1 %= var2

Memberikan nilai var1 % var2 pada variabel var1.


2.6 State (Keadaan)

Ciri-ciri state dalam LSL dengan script dapat mendefinisikan dalam banyak cara. Berpindah dari satu state ke state lainnya mengunakan awalan state (contoh : state default). State didefinisikan dengan menggunakan kata kunci “state” (contoh : state bagus{…}) dengan pengecualian untuk state default, state default tidak dituliskan dengan menggunakan kata kunci “state” pada awalannya.

Seluruh script harus memiliki state default, yang juga berfungsi sebagai state awal pertama kali script dijalankan. Jika suatu state lain didefinisikan dalam script lebih dahulu dari state default, maka compiler akan melaporkan sintaks error. State berisikan kontrol event (event handler) yang akan dipicu oleh mesin virtual LSL. Semua state yang didefinisikan harus memiliki minimal satu kontrol event, jika tidak maka compiler akan membaca pesan error.

Ketika interpreter (penerjemah) membaca perintah pergantian pada sebuah state, keadaan yang berisi pernyataan pergantian tersebuat akan segera berakhir. Jika dalam state didefinisikan kontrol event “state_exit” maka pernyataan atau kode-kode didalam kontrol event tersebut akan dijalankan terlebih dahulu sebelum berpindah ke state yang baru. Ketika state berganti, semua keadaan yang tertunda akan dihapus akan tetapi nilai yang berada dalam suatu keadaan belum tentu terhapus.

2.6.1 state_entry

Keadaan state_entry terjadi ketika sebuah state baru dijalankan, termasuk ketika pertama kali program dijalankan, state_entry merupakan kontrol event yang selalu dijalankan pertama kali

2.6.2 state_exit

Keadaan state_exit terjadi ketika perintah pergantian state dijalankan, kontrol event ini terjadi sebelum state baru menjalankan kontrol event state_entry

Sebuah kontrol event state_exit disediakan untuk menghapus semua nilai pada state yang lama sebelum state tersebut ditinggalkan. Kontrol event state_exit tidak dijalankan ketika objek tempat script tersebut dihapus.

2.7 Tipe dan Variabel

2.7.1 Tipe

Variabel, parameter fungsi dan nilai kembali memiliki tipe. Itu berarti sebuah nilai disimpan dalam sebuah variabel, mengikat pada parameter fungsi, atau dikembalikan oleh sebuah fungsi harus dalam tipe yang sama, atau harus dirubah menjadi tipe yang sama

LSL menyediakan sekelompok tipe yang terdiri dari tujuh jenis tipe yang biasa digunakan didalam bahasa pemrograman ini.

Tabel n Tipe data

Type

Deskripsi

integer

Kseluruhan angka yang berkisar antara -2,147,483,648 sampai 2,147,483,647

float

Sebuah angka decimal yang berkisar antara 1.175494351E-38 sampai 3.402823466E+38

vector

Terdiri dari tiga floats dalam sebuah bentuk <>. Biasanya digunakan untuk besaran posisi, warna atau euler rotasi

rotation

Sabuah quaternion rotasi, terdiri dari 4 tipe float, <>

key

Sebuah UUID / Universal Unique IDentifier (special string) digunakan sebagai identitas dari sesuatu didalam SL, seperti seorang agent, objek, suara, teksture barang inventory ataupun permintaan dataserver(dataserver request)

string

Sekelompok karakter yang dibatasi oleh jumlah memory yang disediakan dalam skrip

list

Sebuah daftar yang beranekaragam dari tipe data lain.

Untuk menkonversi antara tipe yang berbeda dari sebuah nilai digunakan “typecasting” (proses konversi antara tipe yang berbeda dengan sebuah format tertentu). Seperti : ((newType)expression). Proses typecasting adalah seperti merubah integer ke bentuk float atau string ke bentuk key.

Sebagai contoh untuk menggunakan fungsi llSay pada sebuah integer maka harus merubahnya terlebih dahulu kedalam bentuk string.:

integer x = 5;
llSay(0, (string)x);
 

2.7.2 Variabel

Sebuah variabel merupakan sebuah identitas atau nama dari sebuah tempat untuk menyimpan suatu informasi didalam sebuah script program. Proses pembuatan variabel dikenal dengan nama “deklarasi variabel”. Sebuah variabel pasti memiliki sebuah tipe seperti string, integer, float, vector, rotation, key, atau list. Tipe dari sebuah variabel mencerminkan tipe yang dimiliki oleh suatu nilai yang tersimpan didalamnya.

Variabel dapat di deklarasikan dimanapun didalam kode program bisa berjalan. Bisa sebelum state default yang dikenal dengan sebutan variable global. Yang tidak dibatasi oleh event atau fungsi. Variabel mempunyai batasan yang dapat dibagi manjadi variabel lokal dan global.

Untuk mendeklarasikan sebuah variabel digunakan format :

type name;

“type” merupakan salah satu dari tipe yang berlaku dalam LSL. Dan “name” merupakan setiap kombinasi dari huruf (baik huruf besar atau kecil), angka, garis bawah, dan tidak diawali dengan angka.

Nama dari sebuah variable terdiri dari tanda petik satu (‘), tanda pagar (#), dollar ($), lawan garis miring (\), tanda Tanya (?) pada awal dan akhir penamaan tidak akan membuat error tetapi akan dihiraukan. Seperti variabel dengan nama "foo" akan sama artinya dengan variabel "foo$", "$foo", "foo?", dan sebagainya. Variabel juga dapat diberikan nilai awal pada garis yang sama saat dideklarasikan

contoh :

integer bar = 3;

artinya mendeklarasikan sebuah variabel dengan tipe integer dengan nama “bar” dengan nilai awal adalah 3.

Untuk memberi nilai pada sebuah variabel digunakan format :

name = value;

dimana name adalah nama dari variabel dan value adalah nilai yang akan diberikan dalam variabel tersebut.

Contoh :

integer foo;

Mendeklarasikan sebuah variabel dengan tipe integer dengan nama foo

foo = 2;

Memberikan nilai foo dengan angka 2.

string MyLongNamed2284StringThat_USES_underscore;

Mendeklarasikan sebuah variabel dengan tipe string dengan nama MyLongNamed2284StringThat_USES_underscore.

MyLongNamed2284StringThat_USES_underscore = "hello!";

Memberikan nilai MyLongNamed2284StringThat_USES_underscore dengan nilai “hello!”

1. Integer

Sebuah integer tipe data signed (memiliki nilai negatif dan positif), nilai 32-bit dengan range dari -2147483648 sampai 2147483647. LSL tidak memiliki tipe integer unsign (nilai positif saja dengan range bit tetap 32 bit).

Contoh :

10
122
-59438
0x5465
 

Sebuah integer adalah seluruh nilai tapi bukan pecahan/decimal, jika bentuknya pecahan maka bisa dikelompokan tipe float. Pada versi Second Life 1.5, tipe integer dapat digunakan untuk bentuk heksadesimal (contoh: 0xff, 0x10, 0xF0AB, 0x20baef49 dsb...).

Contoh :

integer dec = 42; // 42 decimal
integer hex = 0xff; // 255 decimal

Bentuk oktal hanya berlaku pada Second Life versi 1.5.0 sampai versi 1.5.2, alasannya tidak digunakan lagi karena tidak dapat digunakan oleh beberapa skrip yang telah ada. Dan tidak disebutkan Linden Lab akan berencana untuk menerapkannya lagi. Untuk membulatkan sebuah tipe float kedalam integer digunakan fungsi llRound. Perlu diingat, sebuah integer yang bernilai lebih kecil atau lebih besar dari range nilai akan dikenali dengan nilai -1.

Contoh :

// saat di Compile maka nilai yang berada didalam variable x adalah = -1.
integer x = 12345678900000;
 
 

2. Float

Tipe Float adalah sebuah ketetapan dalam IEEE-754 yaitu 32-bit nilai floating yang berjarak atau memiliki range dari ??1.401298464E-45 to ??3.402823466E+38.

Contoh :

9.9
10.0
100000.1
 

Tipe float dalam LSL dapat ditulis kedalam bentuk notasi Scient seperti : 1.123E-2 atau 512E+3. Tambahannya, huruf f atau F dapat ditambahkan. Ini merupakan persamaan bentuk dengan bahasa C, dimana huruf “f” dibutuhkan untuk mengenali Kompiler membaca nilai tersebut sebagai tipe float dan bukan double (akan tetapi itu tidak penting karena LSL hanya menggunakan tipe float saja).

Tipe float 32-bit dibagi kedalam 24-bit signed yang disebut "mantissa" (berisikan nilai actual dalam digit) dan 8-bit signed "exponent" (mewakili besar/magnitude dimana sebagai tempat hasil kali dengan mantissa). sebuah 23-bit (1 bit lost untuk sign) mantissa memberikan presisi yang sama dengan rata-rata 7 decimal digits (lebih tepatnya log10(223)). Ini berarti nilai akan jarang sekali disimpan dan akan sering mengganggu, penambahan atau pengurangan dari dua buah angka yang sangat berbeda besarnya akan menghasilkan hasil yang tidak diharapkan, sedangkan mantissa tidak dapat menyimpan semua digit penting.

Sebagai IEEE-754, LSL menyediakan nilai negatif nol(-0), ini tidak biasanya untuk mengenali nilai negatif nol kecuali melakukan proses typecasting ke bentuk string.

Contoh:
340000000.0 + 4.0 = 340000000.0

Jawaban yang benar adalah (340000004.0) memiliki 9 angka penting, sedangkan dua digit terakhir hilang.

Beberapa hal yang sering kita temui dalam memilih nilai adalah dengan menjadikannya nilai tersebut ke dalam tipe float atau integer. Untuk mengenali sebuah integer menjadi float adalah dengan menambahkan “.0” pada akhir nilainya. Beberapa fungsi tidak membutuhkan bentuk seperti ini.

Ada 4 teknik yang digunakan untuk mengkonversi float kedalam integer

Tabel n. Fungsi yang berhubungan dengan tipe variable float

Function

Tujuan

(integer)

Mengembalikan nilai integer dari sebuah float dengan tidak menghiraukan bentuk decimal yang mengikutinya

llRound

Membulatkan tipe float sebesar 1/2 (1.2 dibulatkan menjadi 1, 1.6 dibulatkan menjadi 2, -2.5 dibulatkan menjadi -3).

llCeil

Membulatkan float ke atas menjadi bentuk integer, serupa dengan typecast.

llFloor

Membulatkan float ke bawah menjadi bentuk integer, serupa dengan typecast.

Catatan : mengunakan teknik typecast jika memungkinkan akan lebih cepat dan lebih sedikit mengunakan memori

3. Vector

Tipe vector adalah tipe yang terbentuk dari 3 buah nilai bertipe float yang digunakan bersama dalam suatu bentuk. Biasanya menunjukan sebuah arah atau besaran. Dalam LSL, bentuk format dari tipe vector adalah . sebuah vector dapat digunakan untuk menunjukan posisi dari sebuah benda 3 dimensi, arah, kecepatan, impulse, skala, warna ataupur rotasi (dalam bentuk/format euler). Satu komponen dapat digunakan dengan menuliskan '.x', '.y', and '.z' (liha penjelasan dibawah). Nilai dari vector NULL adalah <0.00000,> (atau hanya <0.0,> untuk membuatnya lebih sederhana).

LSL melakukan beberapa proses typecasting tetapi compiler tidak melakukan konversi tipe atau kode sederhana saja, jadi ketika <0,> adalah nilai benar, itu akan mengunakan lebih kode byte dan lebih lambat daripada <0.0,>. Untuk alasan tersebut digunakan bentuk desimal dengan menambahkan titik saja tidak perlu menambahkan extra 0.

Sebagai contoh bentuk : <.9,1,.25>

vector a = <1,2,3>;
llOwnerSay((string)a); //<1.00000,>
 

Tabel n Vector Arithmetic Operators

+

Menambah dua vector bersamaan

<1,2,3> + <2,0,3> = <1+2,> = <3,2,6>

-

Mengurangi suatu vector dengan vector lainnya

<1,2,3> - <2,0,3> = <1-2,> = <-1,2,0>

*

Vector (perkalian titik) dot product

<1,2,3> * <4,5,6> = (1 * 4) + (2 * 5) + (3 * 6) = 32

%

Vector (perkalian silang) cross product

<1,2,3> % <4,5,6> = <2*6> = <-3, 6, -3>

Catatan : jika sebuah vector dikalikan sebuah float bersamaan dengan menggunakan operator “*”, maka akan menghasilkan sebuah skala vector dari nilai float tersebut : <1,> * 5 menghasilkan nilai vector <5,10,15>.

Sebuah vector dapat dirotasikan dengan menggunakan operator “*” dan sebuah rotasi :

vector v;
vector result;
rotation r;
 
result = v * r; // merotasikan vector v dengan rotasi r

Untuk mengganti sebuah float dari sebuah vector, deklarasikan sebuah variable dan alamatkan dengan menunjuk komponen vector baik “x”, “y”, ataupun “z” dengan bentuk "vector_name.x", "vector_name.y" and "vector_name.z". setiap komponen akan memiliki nilai asli dari setiap komponen float dari vector tersebut.

Contoh:

vector foo = llGetPos();
foo.z += 1; 
// atau:
foo.z += <0,0,1>;
// atau
foo.z++;
//atau
++foo.z;
 

Semua metode diatas akan menambahkan nilai 1 kepada variabel “foo”, akan tetapi metode terakhir adalah metode yang paling cepat dijalankan.
Beberapa fungsi yang berhubungan dengan vector.

Tabel n Fungsi yang berhubungan dengan keceptant

Function

Tujuan

llVecDist

Mendapatkan nilai jarak dari dua vector

llVecMag

Serupa dengan llVecDist akan tetapi vector keduanya adalah <0,0,0>

llVecNorm

Untuk mencari normalisasi dari sebuah vector dengan arah yang sama denga input yang dimasukkan

llLookAt

Merotasikan objek untuk berotasi sesuai dengan posisi vector yang dimasukkan