Penulis Topik: Buat program yuk!  (Dibaca 11393 kali)

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

Offline Èxsharaèn

  • Pölisia mar Ranch-i-ru
  • Administrator
  • Lv 9 Petualang senior
  • ************
  • Tulisan: 5.650
  • Karma: 8
  • Jenis kelamin: Pria
  • Veni, veni, venias; ne me mori facias...
  • Bergabung sejak: 14/10/2006
    YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • RPG Fantasy Web Indonesia
Buat program yuk!
« pada: 04 November 2006, 08:41:59 »
Versi sebelumnya acak-acakan karena aku belum menemukan konsep yang pas, maka untuk versi kali ini aku buat sesimpel mungkin, jika perlu dengan gambar supaya memudahkan.

Juga, kali ini aku hanya akan memakai satu bahasa saja, yaitu C++. Ini terpaksa dilakukan mengingat bahasa lainnya (VB, Ruby, Java, dan PHP) membutuhkan pengetahuan ekstra tentang pemrograman berorientasi objek (object-oriented programming, biasa disingkat OOP), yang sebaiknya dipelajari bertahap setelah kita mantap pada konsep pemrograman. Jadi, yang ingin belajar bahasa lain, atau yang mengeluh kenapa hasil program dalam topik ini masih berbasis konsol (DOS), sabar dulu yaa...

Perlahan-lahan aku akan post kembali semua topik yang pernah diulas di forum lama, mungkin dengan bahasa yang lebih ringan, supaya yang baru bergabung di sini tidak ketinggalan.

Ditungguh yah!
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
WAYN http://Exsharaen.wayn.com
About.me http://about.me/hoshiro.exsharaen

Offline Èxsharaèn

  • Pölisia mar Ranch-i-ru
  • Administrator
  • Lv 9 Petualang senior
  • ************
  • Tulisan: 5.650
  • Karma: 8
  • Jenis kelamin: Pria
  • Veni, veni, venias; ne me mori facias...
  • Bergabung sejak: 14/10/2006
    YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • RPG Fantasy Web Indonesia
Re: Buat program yuk!
« Jawab #1 pada: 03 Maret 2007, 10:46:43 »
Dengan berbagai pertimbangan, bahasa di topik ini aku ubah ke Ruby. Kenapa pakai Ruby? Ruby relatif lebih mudah dipelajari ketimbang C++ dan lisensinya GPL alias gratis, jadi kita nggak usah merasa berdosa memakai program bajakan.

Sebelum itu, ada baiknya kita mengenal dulu apa itu Ruby.

Ruby diciptakan di Jepang oleh seorang profesor (maaf lupa namanya) yang merasa kurang puas akan bahasa pemrograman yang sudah ada saat itu. Saat Ruby lahir, ia semata-mata hanya untuk memenuhi projek kuliah saja, namun dibantu ketidakpuasan sang profesor, bahasa ini berkembang. Dulu tidak terlalu populer dibandingkan C, Perl, Phyton, dan bahasa lainnya, namun sekarang bahasa ini mulai diminati karena kemudahannya. Karena itulah aku memutuskan menggunakan bahasa Ruby sepanjang artikel ini, sekaligus memperkenalkannya di Indonesia.

Ruby diklaim 100% berbasis objek (tentang apa ini lihat artikel lain berjudul Pemrograman Berbasis Objek, segera ditulis) dan mungkin hal ini benar. Kita tidak akan pusing-pusing dulu tentang kenyataan ini, yang penting kita familiar dulu dengan logika pemrograman. Setelah paham logikanya, dijamin kalian akan cepat mempelajari bahasa baru.

Ruby versi terbaru adalah versi 1.8.5, bisa didapatkan di http://www.ruby-lang.org (atau kalau ada yang beli PCMedia edisi 03/2007, instalernya ada di DVD-nya; AWAS! Berukuran besar, 27 MB). Silakan dapatkan dan instal. Kalau mau, kalian bisa mencoba bahasa Ruby langsung di perambah pada alamat di atas.

Karena kita hanya akan belajar logika pemrograman saja, kita tidak akan membahas lebih lanjut tentang cara membuat program di Ruby. Untuk ini, kita bisa menggunakan FreeRIDE yang sudah disertakan dalam paket instalasi. (FreeRIDE serupa dengan Visual C++, Turbo Pascal, dsb.)

Sudah siap?
« Edit Terakhir: 03 Maret 2007, 11:07:39 oleh Èxsharaèn »
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
WAYN http://Exsharaen.wayn.com
About.me http://about.me/hoshiro.exsharaen

Offline Èxsharaèn

  • Pölisia mar Ranch-i-ru
  • Administrator
  • Lv 9 Petualang senior
  • ************
  • Tulisan: 5.650
  • Karma: 8
  • Jenis kelamin: Pria
  • Veni, veni, venias; ne me mori facias...
  • Bergabung sejak: 14/10/2006
    YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • RPG Fantasy Web Indonesia
Re: Buat program yuk!
« Jawab #2 pada: 03 Maret 2007, 11:21:12 »
Untuk membuka FreeRIDE, pilih Start Menu > All Programs > Ruby-<nomor versi> > FreeRIDE. Pada awalnya, sebuah jendela konsol (DOS) akan terbuka dan banyak muncul warning, namun abaikan saja. Jendela baru akan terbuka.

Untuk membuat sebuah program, kita sebaiknya membuat sebuah projek. Namun, untuk saat ini, kita tidak perlu membuat sebuah projek. Cukup buat sebuah berkas baru dengan memilih menu File > New atau tekan saja Ctrl + N. Sebuah berkas baru bernama untitled1.rb akan terbuka.

Khusus pengguna Windows, ada sedikit pengaturan yang perlu dilakukan. Buka menu Edit > Preferences.... Cari bagian Debugger/Run, lalu beri tanda pada pilihan Run process in terminal. Ini supaya kita bisa menjalankan program kita. Jika perlu, beri tanda juga pada pilihan Save files before running/debug.... Klik OK.

OK, kita siap membuat program pertama kita!
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
WAYN http://Exsharaen.wayn.com
About.me http://about.me/hoshiro.exsharaen

Offline Èxsharaèn

  • Pölisia mar Ranch-i-ru
  • Administrator
  • Lv 9 Petualang senior
  • ************
  • Tulisan: 5.650
  • Karma: 8
  • Jenis kelamin: Pria
  • Veni, veni, venias; ne me mori facias...
  • Bergabung sejak: 14/10/2006
    YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • RPG Fantasy Web Indonesia
Re: Buat program yuk!
« Jawab #3 pada: 03 Maret 2007, 11:26:18 »
Sesuai tradisi untuk pengenalan bahasa baru, kita akan mencetak kalimat "Hello World!". Untuk melakukan ini, ketikkan kode berikut.

Kode: [Pilih]
p "Hello World!"

Langsung jalankan dengan menekan tombol roket (agak aneh tombolnya ;)). Coba lihat hasilnya.
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
WAYN http://Exsharaen.wayn.com
About.me http://about.me/hoshiro.exsharaen

Offline Èxsharaèn

  • Pölisia mar Ranch-i-ru
  • Administrator
  • Lv 9 Petualang senior
  • ************
  • Tulisan: 5.650
  • Karma: 8
  • Jenis kelamin: Pria
  • Veni, veni, venias; ne me mori facias...
  • Bergabung sejak: 14/10/2006
    YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • RPG Fantasy Web Indonesia
Angka
« Jawab #4 pada: 24 Mei 2007, 10:52:43 »
Okay! Setelah lama vakum, aku coba lanjutkan tutorial ini.

Oh ya, ada cara lain untuk menulis program dalam Ruby. Kalau kalian malas menggunakan FreeRIDE, mungkin karena loading-nya lama, silakan gunakan Notepad! Atau, kalau ingin kode yang kalian tuliskan diformat dengan rapi, carilah Notepad++. Simpan progam kalian dengan format "namafile.rb" kalau menggunakan Notepad (awas! Jangan lupa .rb di akhir nama berkas lengkap dengan tanda petik gandanya). Untuk menjalankan, silakan buka Command Prompt, cari berkas program kalian tadi, dan ketikkan seperti berikut di Command Prompt:

Kode: [Pilih]
C:\>ruby programku.rb

Silakan gunakan cara manapun yang kalian suka.

Kita coba yang simpel-simpel dulu yah...

Angka

Siapa sih yang nggak tahu angka? Angka sudah jadi makanan kita sehari-hari. Nah, dalam pemrograman, termasuk Ruby, angka bisa dibagi menjadi dua kategori besar:

Integer, yaitu bilangan bulat (positif maupun negatif). Contohnya, 12, 4, 0, -2, dan seterusnya.
Floating-point, atau cukup float saja, yaitu bilangan pecahan dalam bentuk desimal. Contohnya: 4.5, 24.53, -23.53, dan seterusnya.

Diingat dulu yah, kita akan menggunakan titik untuk menyatakan tanda desimal (sistem US) alih-alih koma. Jadi, kalau aku tulis 4.5, itu maksudnya 4,5 dalam bahasa Indonesia.

Nah, kita bebas mengoperasikan kedua jenis angka ini. Ayo mulai! Cobalah program berikut.

Kode: [Pilih]
p 4 + 1
p 6 - 7
p 9.5 * 2.5
p 9 / 4

dan jalankan.

Bagaimana hasilnya?

Kenapa bisa begitu?

Simpel sekali, kita menggunakan perintah p (atau puts) untuk menampilkan hasil perhitungan kita. Jadi, bisa ditebak:
4 + 1 = 5
6 - 7 = -1
9.5 * 2.5 = 23.75

Tapi...
9 / 4 = 2

Lho? Bukannya 9 / 4 itu 2.25? Memang, di kebanyakan bahasa pemrograman, ada sebuah aturan demikian. Integer jika dioperasikan dengan integer, hasilnya akan tetap integer. Nah, 9 itu integer, dan 4 juga integer. Ketika kita menghitung 9 / 4, komputer tetap akan menghitung hasilnya sebagai 2.25, namun dibulatkan ke bawah karena integer adalah bilangan bulat. Coba saja hitung 11 / 4, seharusnya 2.75 namun Ruby akan menampilkan 2 alih-alih 3.

Apa yang terjadi kalau kita mengoperasikan integer dengan float (atau sebaliknya)? Ayo dicoba!

Kode: [Pilih]
p 4.5 / 2
p 2 * 3.14
Hasilnya 2.25 dan 6.28. Berarti, integer dengan float akan selalu menghasilkan nilai float.

Yuk diulang! Integer dengan integer hasilnya pasti integer, integer dengan float (dan sebaliknya) hasilnya pasti float.

Lha, trus, gimana dong kalau andaikan kita ingin mengoperasikan integer dengan integer tapi hasilnya float? Mudah saja: ubah salah satu angka menjadi float. Misalnya seperti berikut:

Kode: [Pilih]
p 9 / 4.0
p 9.0 / 4
p 9.0 / 4.0
p 9.to_f / 4
Semua variasi kode ini menghasilkan 2.25. Apa itu to_f? Ini adalah salah satu metode (method) untuk mengubah tipe data sebuah angka. Nanti kita akan bicara lebih banyak tentang method. Untuk sekarang, anggap ini perkenalan ke istilah baru yang akan sering kita jumpai nanti.

Mudah kan?
« Edit Terakhir: 25 Mei 2007, 12:10:42 oleh Èxsharaèn »
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
WAYN http://Exsharaen.wayn.com
About.me http://about.me/hoshiro.exsharaen

Offline Èxsharaèn

  • Pölisia mar Ranch-i-ru
  • Administrator
  • Lv 9 Petualang senior
  • ************
  • Tulisan: 5.650
  • Karma: 8
  • Jenis kelamin: Pria
  • Veni, veni, venias; ne me mori facias...
  • Bergabung sejak: 14/10/2006
    YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • RPG Fantasy Web Indonesia
Huruf
« Jawab #5 pada: 24 Mei 2007, 11:20:20 »
Sebelum kita mulai mengacak-acak angka dengan perhitungan matematis (misalnya dalam persamaan linear), kita kenalan dulu dengan satu lagi tipe data yang cukup penting. Apa itu?

Huruf

Tidak ada yang spesial dengan huruf. Semuanya sudah tahu kan? Tapi, bagaimana di dunia pemrograman? Apa huruf diperlakukan secara spesial?

Jawabannya adalah ya.

Pada kebanyakan bahasa pemrograman, kumpulan huruf (termasuk tanda baca dan karakter lainnya) disebut string. Bukan benang lho... tapi bisa juga dianggap "untaian karakter". Ruby juga mengenal string.
Tapi, seperti apa sih string itu di Ruby? Nii contohnya...

Kode: [Pilih]
'Aku adalah contoh string.'
'Ini juga string.'
'A'
''
String dalam Ruby biasa diapit dengan tanda kutip tunggal '. Boleh juga sih pakai tanda kutip ganda ". Lah, baris terakhir itu apa juga string? Yup, itu juga termasuk string, namun biasanya disebut empty string alias string kosong, karena memang tidak isinya.

Apa saja yang bisa kita lakukan dengan string? Niii...

Menampilkan string! Mudah saja, gunakan perintah p atau puts. Kita sudah melakukan ini di awal perkenalan kita dengan Ruby:

Kode: [Pilih]
p 'Hello World!'

Menggabungkan dua atau lebih string! Menariknya, ini dilakukan dengan operasi "aritmatika", yaitu penjumlahan. Ayo kita coba saja:

Kode: [Pilih]
p 'Aku ini' + ' seorang manusia'
Hasilnya adalah 'Aku ini seorang manusia'.

Mengulang string yang sama! Ini juga menarik, karena bisa dilakukan dengan operasi perkalian! Coba:

Kode: [Pilih]
p 'Bosan! ' * 5
Hasilnya adalah 'Bosan! Bosan! Bosan! Bosan! Bosan! '.

Nah, hati-hati, angka juga bisa dijadikan string. Bedakan 12 dengan '12'. 12 pertama adalah angka 12, sementara 12 yang kedua adalah string atau teks "12". Hati-hati saat melakukan operasi yang melibatkan angka dan string. Misal:

Kode: [Pilih]
p '12' + 12
Ini akan menyebabkan kesalahan TypeError: Can't convert Fixnum into String. Kenapa? Tidak ada perintah untuk menambahkan string dengan angka memang (dan nggak masuk akal kan?), jadi Ruby akan mengeluarkan pesan kesalahan tersebut.

Nah, ada satu lagi yang perlu diperhatikan saat bermain-main dengan string. Ingat kan kalau string diapit dengan tanda kutip tunggal? Bagiamana kalau aku mau menulis 'I wasn't there'? Seperti inikah?

Kode: [Pilih]
p 'I wasn't there'
Silakan coba, dijamin error :D

Lha trus gimana dong? Untuk keperluan inilah kita mengenal escape character, yaitu karakter khusus yang berfungsi "meloloskan" karakter berikutnya agar tetap dianggap sebagai satu kesatuan dengan string kita. Jadi, kalimat tadi ditulis begini:

Kode: [Pilih]
p 'I wasn\'t there'
p "I wasn't there"
Baris terakhir tidak akan bermasalah, karena kita mengapit string kita dengan tanda kutip ganda, sehingga tanda kutip tunggal yang ditemui di dalam string kita tidak akan mengganggu.

Ada beberapa escape character yang terkenal, misalnya \n untuk menandai baris baru. \\ akan menghasilkan \ sendirian. Silakan dicoba!

Okay, sekarang kita siap untuk pemrograman lebih lanjut!
« Edit Terakhir: 25 Mei 2007, 12:11:04 oleh Èxsharaèn »
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
WAYN http://Exsharaen.wayn.com
About.me http://about.me/hoshiro.exsharaen

Offline Èxsharaèn

  • Pölisia mar Ranch-i-ru
  • Administrator
  • Lv 9 Petualang senior
  • ************
  • Tulisan: 5.650
  • Karma: 8
  • Jenis kelamin: Pria
  • Veni, veni, venias; ne me mori facias...
  • Bergabung sejak: 14/10/2006
    YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • RPG Fantasy Web Indonesia
Variabel
« Jawab #6 pada: 25 Mei 2007, 12:10:22 »
Nah, setelah mengenal dua tipe data yang paling penting, yaitu angka dan string, kita siap melakukan pemrograman sesungguhnya, yang melibatkan cukup banyak faktor. Jangan pusing dulu, ini tidak sesulit yang dibayangkan kok!

Anggap saja sekarang kita hendak membuat program untuk menghitung luas lingkaran (tahu semua yah? Luas lingkaran = 3.14 * jari-jari * jari-jari). Kita mungkin buat program seperti ini:

Kode: [Pilih]
p 3.14 * 2 * 2
Tapi ini untuk lingkaran berjari-jari 2 saja. Bagaimana kalau aku ingin jari-jarinya 10? Atau terserah pengguna kita mau masukkan berapa saja? Nah, untuk itulah kita mengenal...

Variabel

Mudah saja, variabel di sini fungsinya sama persis seperti variabel yang kita kenal dalam persamaan matematika. Dalam pemrograman, variabel berfungsi menyimpan sementara sebuah nilai sampai diperlukan kembali.

Nah, untuk mengisi sebuah variabel, kita memerlukan persamaan atau assignment. Mudah sekali, ini diwakili dengan tanda sama dengan =.

Awas, variabel mempunyai tata nama sendiri. Ini berbeda untuk tiap bahasa pemrograman. Di Ruby, variabel selalu diawali dengan huruf kecil dan hanya boleh mengandung huruf dan angka. Contoh:

variabelku --> ini benar
variabel2ku --> ini benar
2variabel --> salah!!!
Variabel --> benar tapi bukan variabel!!!

Untuk kasus terakhir, kita bicarakan nanti.

Biasakan memberi nama variabel yang jelas. Misalnya, untuk menampung jari-jari, silakan beri nama jari, jari_jari (tanda - tidak diperbolehkan dalam nama variabel), radius, dan sebagainya. Memang ada beberapa kasus bahwa nama variabel tidak perlu diperhatikan, tapi untuk mempermudah pembacaan dan agar program kalian dimengerti orang lain, biasakan hal ini yaa...

Oke! Jadi, program luas lingkaran kita bisa ditulis begini:

Kode: [Pilih]
radius = 5
p 3.14 * radius * radius
Coba jalankan. Hasilnya adalah 78.5.
Untuk perpangkatan (misal kuadrat), boleh juga menggunakan operator **. Jadi, radius * radius bisa diubah menjadi radius ** 2. Silakan dicoba!

Aduh, tapi aku nggak ingin pakai 3.14 untuk pi! Aku mau 22/7 saja, atau 3.141592853! Mengubah langsung angkanya sih tidak masalah, tapi andaikan angka itu digunakan berulang kali, alangkah ribetnya... Untuk itulah kita mengenal...
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
WAYN http://Exsharaen.wayn.com
About.me http://about.me/hoshiro.exsharaen

Offline Èxsharaèn

  • Pölisia mar Ranch-i-ru
  • Administrator
  • Lv 9 Petualang senior
  • ************
  • Tulisan: 5.650
  • Karma: 8
  • Jenis kelamin: Pria
  • Veni, veni, venias; ne me mori facias...
  • Bergabung sejak: 14/10/2006
    YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • RPG Fantasy Web Indonesia
Konstanta
« Jawab #7 pada: 25 Mei 2007, 12:16:19 »
Konstanta

Konstanta adalah variabel khusus yang nilainya selalu tetap. Jadi, sangat tidak dianjurkan mengubah nilai sebuah konstanta (apa kata para pakar matematika kalau kita mengubah PI ke 3?). Tata nama konstanta mirip dengan variabel, hanya saja konstanta diawali dengan HURUF BESAR. Agar tidak keliru dengan variabel, dianjurkan memberi nama konstanta dengan HURUF BESAR SEMUA sementara nama variabel dengan huruf kecil semua.

Jadi, PI kita bisa dijadikan konstanta seperti berikut:

Kode: [Pilih]
PI = 3.141592853
radius = 5
p PI * radius ** 2
walaupun sebenarnya Ruby sudah menyediakan konstanta untuk PI, yaitu Math::PI.

Cobalah mengubah nilai PI di tengah-tengah program, Ruby akan memberikan peringatan (warning) bahwa konstanta sudah diberi nilai sebelumnya.

Gampang kan?

Okay! Dengan pengetahuan yang sudah kita dapat sejauh ini, ayo mulai membuat program yang menarik!
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
WAYN http://Exsharaen.wayn.com
About.me http://about.me/hoshiro.exsharaen

Offline Èxsharaèn

  • Pölisia mar Ranch-i-ru
  • Administrator
  • Lv 9 Petualang senior
  • ************
  • Tulisan: 5.650
  • Karma: 8
  • Jenis kelamin: Pria
  • Veni, veni, venias; ne me mori facias...
  • Bergabung sejak: 14/10/2006
    YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • RPG Fantasy Web Indonesia
Masukan dan konversi data
« Jawab #8 pada: 25 Mei 2007, 12:35:19 »
Sebelum mulai latihan, ada satu perintah lagi yang sebaiknya diberikan sekarang, yaitu gets. Kalian pasti sudah tahu fungsi puts, yaitu menampilkan apapun ke layar. Nah, supaya program kita lebih interaktif, yaitu bisa menerima masukan (input) dari penggunanya, kita gunakan fungsi gets. Cara pakainya seperti ini:

Kode: [Pilih]
variabel = gets
Tiap kali bertemu perintah gets, program akan berhenti sebentar, menunggu masukan dari kita sampai kita menekan tombol Enter. Awas! gets memberikan hasil berupa string, jadi hati-hati kalau kita sebenarnya ingin masukan itu berupa angka.

Contoh! Andaikan program luas lingkaran kita tadi ingin menerima masukan jari-jari dari pengguna. Mungkin ini berhasil...?

Kode: [Pilih]
radius = gets
p Math::PI * radius ** 2
Jalankan dan masukkan angka berapa saja, misalkan 24. Ternyata keliru! Ruby mengatakan:
Kutip
Undefined method '**' for "24\n":String

Lho... kenapa ada \n di sana? Memang, gets memberikan input apapun yang dimasukkan, tapi termasuk Enter itu sendiri, yang diwakili dengan karakter \n. Kita bisa menghilangkan \n dengan memanggil perintah chomp seperti ini:

Kode: [Pilih]
radius = gets.chomp
p Math::PI * radius ** 2
Coba jalankan, masukkan angka sembarang, misalkan 24. Lhooo... kok salah lagi?
Kutip
Undefined method '**' for "24":String

\n sudah hilang, tapi kenapa masih tidak mau? Ingat, gets memberikan hasil dalam bentuk string, dan kebetulan string tidak mengenal tanda **. Lalu, bagaimana?

Konversi data

Nah, inilah contoh kasus, ada kalanya kita perlu mengubah sebuah nilai dari tipe data satu ke tipe data lainnya. Pada kasus kita, kita menginginkan nilai dalam bentuk angka (integer/float), tapi yang kita punya string. Mudah saja, konversi ini dilakukan dengan perintah to_i, to_f, atau to_s untuk mengubah apapun ke integer, float, atau string.

Ayo kita kembali lagi ke program luas lingkaran tadi! Mari kita ubah masukan pengguna tadi menjadi angka. Caranya:

Kode: [Pilih]
radius = gets.chomp
p Math::PI * radius.to_f ** 2
Jalankan sekali lagi dan masukkan angka berapa saja, misalkan 24. Nah, kali ini hasilnya benar: 1809.55736846772. Akhirnya!

Kenapa penulisan to_f didahului tanda titik? Sebenarnya, to_i dan kawan-kawannya adalah metode yang bisa digunakan oleh semua angka (numeric). Kita bicarakan ini di topik lain (Pemrograman Berbasis Objek).

Coba percantik program ini supaya tampilnya kurang lebih seperti ini:
Kutip
Masukkan jari-jari: 24
Luas lingkaran: 1809.55736846772

Nah, kita siap untuk latihan! Nggak susah-susah amat kok, tenang!
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
WAYN http://Exsharaen.wayn.com
About.me http://about.me/hoshiro.exsharaen

Offline Èxsharaèn

  • Pölisia mar Ranch-i-ru
  • Administrator
  • Lv 9 Petualang senior
  • ************
  • Tulisan: 5.650
  • Karma: 8
  • Jenis kelamin: Pria
  • Veni, veni, venias; ne me mori facias...
  • Bergabung sejak: 14/10/2006
    YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • RPG Fantasy Web Indonesia
Latihan
« Jawab #9 pada: 25 Mei 2007, 12:45:53 »
Wow, sudah cukup banyak juga yah yang kita pelajari kali ini. Kita sudah mengenal angka, huruf, variabel, konstanta, masukan, dan konversi data. Sekarang, waktunya kita mencoba membuat program dengan pengetahuan ini!

1. Perluas program luas lingkaran tadi untuk menghitung juga kelilingnya (keliling = 2 * pi * jari-jari). Contoh tampilan:
Kutip
Masukkan jari-jari: 5
Luas lingkaran: 78.5398163397448
Keliling lingkaran: 31.4159265358979

2. Buat program untuk memasukkan nama depan, nama tengah, dan nama belakang seseorang. Setelah selesai, beri sambutan dengan menuliskan nama terangnya. Contoh:
Kutip
Nama depan: Dewi
Nama tengah: Maharani
Nama belakang: Putri
Halo, Dewi Maharani Putri!

Ini dulu saja deh, coba dibuat dulu. Nggak susah kok!

Berikutnya, kita akan mempelajari bagaimana kita bisa bermain-main lebih banyak dengan program kita. Ditunggu ya!
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
WAYN http://Exsharaen.wayn.com
About.me http://about.me/hoshiro.exsharaen

Offline Èxsharaèn

  • Pölisia mar Ranch-i-ru
  • Administrator
  • Lv 9 Petualang senior
  • ************
  • Tulisan: 5.650
  • Karma: 8
  • Jenis kelamin: Pria
  • Veni, veni, venias; ne me mori facias...
  • Bergabung sejak: 14/10/2006
    YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • RPG Fantasy Web Indonesia
Percabangan
« Jawab #10 pada: 27 Mei 2007, 09:24:08 »
Nah, bagaimana latihannya? Nggak susah kan? Asalkan kita mengerti konsep dasarnya dan tidak hanya menghafalkan saja, kita pasti bisa membuat program sendiri. Sudah siap melanjutkan petualangan?

Seperti yang sudah kita lihat bersama, program kita selama ini dikerjakan secara urut. Baris paling atas akan dikerjakan lebih dulu dan berturut-turut baris-baris di bawahnya mengambil giliran sampai baris terakhir program kita. Tapi, ada kalanya kita akan "melanggar" aturan ini. Bukan berarti nanti kita bisa mengerjakan program dari bawah ke atas, tapi kita bisa melompati atau mengulangi beberapa baris. Nanti kita juga akan melihat bagaimana kita bisa mengerjakan program dari mana saja!

Oke, sekarang bayangkan kasus ini. Ambil saja contoh program sambutan kita. Sambutan itu terdengar datar saja, sama untuk tiap orang, tidak peduli jenis kelaminnya. Kita ingin agar kalau pria yang menggunakan program itu, sambutannya terdengar maskulin, sementara wanita akan disambut dengan feminin.

Langkah pertama, kita mungkin menyuruh pengguna memasukkan jenis kelaminnya seperti ini:
Kode: [Pilih]
p "Masukkan jenis kelamin:"
sex = gets
Lah, terus, bagaimana kita menentukan apa yang akan ditampilkan program kita? Kita sudah tahu jenis kelamin pengguna kita, tapi apa yang harus kita lakukan? Nah, di sinilah kita mulai mengenal...

Percabangan

Istilah kerennya branching. Yup, program kita memang bisa "bercabang", terutama jika kita menemui kondisi-kondisi tertentu yang harus dipenuhi. Mudah sekali, dalam bahasa Inggris percabangan ini diwakili dengan kata if (jika). Semua bahasa pemrograman pasti memiliki kata if termasuk Ruby. Bagaimana cara kerjanya?

Blok if yang paling sederhana berbentuk seperti ini:
Kode: [Pilih]
if kondisi [then]
  program di sini...
end

Tiap kali bertemu kata if, program kita akan mengecek kondisi, terpenuhi atau tidak. Kalau terpenuhi, ia akan menjalankan program apapun yang berada di dalamnya. Kalau tidak, seluruh blok (yang diapit dengan kata if dan end) akan dilewati alias tidak dikerjakan. Kata then boleh digunakan boleh tidak.

Bingung? Nii ilustrasinya dalam kata-kata sederhana...

jika kondisi terpenuhi
  lakukan apa saja yang ingin kita lakukan di sini
selesai

Contoh! Pada kasus kita tadi, kita ingin tahu, jenis kelamin pengguna kita laki-laki atau perempuan. Dalam bahasa manusia, ilustrasinya seperti ini.

jika jenis kelamin adalah laki-laki
  beri sambutan maskulin
selesai

Aduh, tapi bagaimana dengan yang perempuan? Blok if juga mengizinkan kita menuliskan program yang akan dilakukan kalau kondisinya tidak terpenuhi. Pada Ruby, ini ditandai dengan kata else. Blok if kita akan jadi seperti ini:

Kode: [Pilih]
if kondisi [then]
  apa yang kita lakukan kalau kondisinya terpenuhi
else
  apa yang kita lakukan kalau kondisinya tidak terpenuhi
end
Inilah yang populer dengan sebutan if-then-else.

Kembali lagi ke program kita! Jadi, dalam bahasa manusia, kita akan melakukan perintah berikut:

jika jenis kelamin adalah laki-laki
  beri sambutan maskulin
selain itu
  beri sambutan feminin
selesai

Bahasa Ruby-nya bagaimana? Nah, untuk mendefinisikan kondisi, kita bebas menggunakan tanda perbandingan, misalnya lebih kecil <, lebih besar >, sama dengan == (awas! Tanda == menunjukkan kondisi sama, bukan persamaan/assignment), tidak sama dengan !=, dan sebagainya. Jadinya seperti ini:
Kode: [Pilih]
if sex == "L"
  p "Hi Mas!"
else
  p "Halo Mbak!"
end

Lengkapnya menjadi seperti ini (kita abaikan dulu yah nama pengguna):
Kode: [Pilih]
p "Masukkan jenis kelamin Anda (L/P):"
sex = gets.chomp.upcase
if sex == "L"
  p "Hi Mas!"
else
  p "Halo Mbak!"
end
upcase akan mengubah string menjadi huruf besar semua.
Silakan dicoba!

Waduh, tapi kalau aku masukkan huruf apapun selain L, program ini memberikan sambutan feminin! Gimana dengan para transgender?
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
WAYN http://Exsharaen.wayn.com
About.me http://about.me/hoshiro.exsharaen

Offline Èxsharaèn

  • Pölisia mar Ranch-i-ru
  • Administrator
  • Lv 9 Petualang senior
  • ************
  • Tulisan: 5.650
  • Karma: 8
  • Jenis kelamin: Pria
  • Veni, veni, venias; ne me mori facias...
  • Bergabung sejak: 14/10/2006
    YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • RPG Fantasy Web Indonesia
Percabangan banyak!
« Jawab #11 pada: 27 Mei 2007, 10:04:48 »
Nah, andaikan syarat atau kondisi yang kita mau ternyata banyak (lebih dari satu), kita bisa menggunakan banyak if, misalnya seperti ini:

Kode: [Pilih]
if kondisi1
  program kalau kondisi1 terpenuhi
else
  if kondisi2
    program kalau kondisi2 terpenuhi
  end
end

Atau seperti ini:
Kode: [Pilih]
if kondisi1
  program kalau kondisi1 terpenuhi
elsif kondisi2
  program kalau kondisi2 terpenuhi
else
  program kalau semua kondisi tidak terpenuhi
end

Nah, kita mengenal satu kata lagi, elsif. Ini sebetulnya kependekan dari else if, menandakan kalau ada syarat lain yang harus dicek kalau syarat sebelumnya tidak terpenuhi.

Program sambutan kita tadi bisa diperbaiki agar ia mengenali jenis kelamin laki-laki dan perempuan. Kalau pengguna memasukkan jenis kelamin yang lain, program tidak akan menyambut pengguna. Kodenya seperti ini:
Kode: [Pilih]
p "Masukkan jenis kelamin Anda (L/P):"
sex = gets.chomp.upcase
if sex == "L"
  p "Hi Mas!"
elsif sex == "P"
  p "Halo Mbak!"
else
  p "Siapa kamu?"
end

Oke! Kita bisa menggunakan percabangan yang banyak ternyata. Nah, dalam satu waktu ternyata kita boleh mengecek lebih dari satu kondisi sekaligus! Kondisi-kondisi ini dihubungkan dengan operator logika (pernah dipelajari di SMP dan SMA). Misalnya, kita ingin membuat program yang mengizinkan pengguna memasukkan umurnya dan program kita akan memberi tahu apa dia bayi, anak-anak, remaja, dewasa, atau tua. Kira-kira seperti ini dalam bahasa manusia:

Masukkan umur.
Kalau umur di bawah 5, berarti kamu balita.
Kalau umur antara 5 hingga 12, kamu anak-anak.
Kalau umur antara 12 hingga 17, kamu remaja.
Kalau umur antara 17 hingga 50, kamu dewasa.
Kalau umur di atas 50, kamu tua.

Kodenya? Perhatikan, operator logika yang paling sering digunakan adalah and, or, dan not. Operator apa nih?

Operator and meminta seluruh syarat terpenuhi agar ia memberikan nilai benar (true). Selain itu, operator and akan mengembalikan nilai salah (false). Misalnya...

if aku cinta dia and dia cinta aku
  kami menikah
end

Kalau dia ternyata tidak cinta aku, kami tidak akan menikah. Aku tidak cinta dia, kami juga tidak akan menikah.
Masuk akal kan? Begitulah operator and bekerja.

Operator or kebalikannya. Ia meminta paling tidak satu kondisi terpenuhi agar ia memberikan nilai true. Kalau ternyata seluruh kondisinya salah, ia memberikan nilai false. Contoh...

if aku cinta dia or dia cinta aku
  kami menikah
end

Ini agak maksa :P Nggak peduli bahwa ternyata dia tidak cinta aku, kami tetap menikah. Atau aku tidak cinta dia tapi dia cinta aku, kami juga tetap menikah. Tapi, kalau aku nggak cinta dia dan dia nggak cinta aku, kami nggak menikah.

Operator not membalik nilai apapun yang diberikan padanya: true jadi false dan sebaliknya. Misal...

if not aku cinta dia
  kami menikah
end

Agak aneh jadinya :D Kalau aku nggak cinta dia, kami justru menikah. Kalau aku cinta dia, kami nggak menikah. Operator not memang membalik semuanya.

Cara pakai and dan or seperti ini: kondisi1 and kondisi2 and kondisi3 ... Khusus not, dia diletakkan sebelum kondisi, jadi bentuknya seperti ini: not kondisi1. Boleh juga dicampur, misalnya kondisi1 and kondisi2 or kondisi3 and not kondisi4.

Nah, kalau ada banyak kondisi, ada prioritas pengerjaan agar hasilnya tepat. Di Ruby, operator not akan selalu dikerjakan lebih dahulu, disusul and dan terakhir or. Misalkan ada syarat seperti ini:
Kode: [Pilih]
kondisi1 and kondisi2 or kondisi3 and not kondisi4
Pengerjaannya adalah:
1. kondisi1 and kondisi2
2. not kondisi4
3. kondisi 3 and (2)
4. (1) or (3)
Jadi, hati-hati saat menggunakan banyak kondisi. Jika ingin kondisi itu dikerjakan lebih dulu, gunakan tanda kurung ().

Oke! Sekarang kita siap membuat program umur kita:
Kode: [Pilih]
p "Masukkan umur:"
umur = gets.chomp.to_i
if umur < 5
  p "Balita"
elsif umur >= 5 and umur < 12
  p "Anak-anak"
elsif umur >= 12 and umur < 17
  p "Remaja"
elsif umur >= 17 and umur < 50
  p "Dewasa"
else
  p "Tua"
end

Hmm... Bagus sih, tapi panjang juga yah... Apa nggak ada cara yang lebih singkat dan ringkas tapi masih bisa terbaca?
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
WAYN http://Exsharaen.wayn.com
About.me http://about.me/hoshiro.exsharaen

Offline Èxsharaèn

  • Pölisia mar Ranch-i-ru
  • Administrator
  • Lv 9 Petualang senior
  • ************
  • Tulisan: 5.650
  • Karma: 8
  • Jenis kelamin: Pria
  • Veni, veni, venias; ne me mori facias...
  • Bergabung sejak: 14/10/2006
    YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • RPG Fantasy Web Indonesia
Select!
« Jawab #12 pada: 27 Mei 2007, 10:26:59 »
Pada beberapa kasus, terutama kalau kondisinya banyak, kadang-kadang menuliskan elsif yang cukup banyak agak melelahkan dan mengurangi pemahaman program kita (agak susah bacanya). Karena itu, untuk menyederhakan kondisi yang cukup banyak, Ruby (dan beberapa bahasa lain) menyediakan bentuk lain percabangan: case (di bahasa lain mungkin dikenal dengan istilah switch, select dsb.). Bentuknya seperti ini:

Kode: [Pilih]
case variabel_yang_dicek
when nilai1
  ...
[when nilai2, nilai3, nilai4[, ...]
  ...]
[when nilai_awal .. nilai_akhir
  ...]
[...]
[else
  kalau tidak terpenuhi semuanya...]
end

Wah, bentuknya ada banyak juga yah... Maksudnya apa nih? Kita lihat satu-satu.

Kode: [Pilih]
when nilai1
Bagian ini akan dikerjakan kalau variabel_yang_dicek bernilai nilai1. Mudah kan?

Kode: [Pilih]
when nilai2, nilai3, nilai4[, ...]
Bagian ini akan dikerjakan kalau variabel_yang_dicek bernilai nilai2, nilai3, atau nilai4. Cocok untuk meringkas beberapa kondisi alih-alih menggunakan operator logika.

Kode: [Pilih]
when nilai_awal .. nilai_akhir
Bagian ini akan dikerjakan kalau variabel_yang_dicek nilainya ada di rentang nilai_awal hingga nilai_akhir (disebut juga range). Tanda .. menandakan bahwa nilai_akhir juga diikutkan dalam pengecekan (nilai_awal <= variabel_yang_dicek <= nilai_akhir) sementara tanda ... menandakan nilai_akhir tidak diikutkan (nilai_awal <= variabel_yang_dicek < nilai_akhir).

Kode: [Pilih]
else
Bagian ini akan dikerjakan jika tidak ada nilai yang memenuhi kasus-kasus sebelumnya.

Nah, program umur kita sebelumnya bisa diubah menggunakan case sebagai berikut:
Kode: [Pilih]
p "Masukkan umur: "
umur = gets.chomp.to_i
case umur
when 0 ... 5
  p "Balita"
when 5 ... 12
  p "Anak-anak"
when 12 ... 17
  p "Remaja"
when 17 ... 50
  p "Dewasa"
else
  p "Tua"
end

Tergantung penggunaannya, case bisa meringkas pekerjaan atau malah merepotkan. Banyak-banyak latihan untuk menemukan mana yang lebih enak digunakan, OK?

Nah, percabangan sudah selesai sampai di sini! Sebelum kita melanjutkan perjalanan...
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
WAYN http://Exsharaen.wayn.com
About.me http://about.me/hoshiro.exsharaen

Offline Èxsharaèn

  • Pölisia mar Ranch-i-ru
  • Administrator
  • Lv 9 Petualang senior
  • ************
  • Tulisan: 5.650
  • Karma: 8
  • Jenis kelamin: Pria
  • Veni, veni, venias; ne me mori facias...
  • Bergabung sejak: 14/10/2006
    YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • RPG Fantasy Web Indonesia
Tips
« Jawab #13 pada: 27 Mei 2007, 10:38:25 »
Tips saat menggunakan percabangan:

1. Saat memulai sebuah blok, misalnya if, case, biasakan langsung mengakhirinya dengan end, baru tuliskan program yang ingin kita lakukan dalam blok itu. Misalnya begini:

Kode: [Pilih]
if
elsif
else
end
Untuk sekarang mungkin belum terlihat apa efektifnya tips ini. Andaikan blok ini sudah selesai dan ternyata ada kondisi lain...

Kode: [Pilih]
if sex == "L"
  p "Laki-laki"
elsif sex == "P"
  p "Perempuan"
else
  if
  else
  end
end
Aku bisa menulis dan membaca dengan benar bahwa ada blok percabangan lain di dalam else yang pertama. Ini akan sangat berguna untuk menghindari kesalahan blok, karena if harus diakhiri dengan end. Andaikan pada blok if yang kedua aku lupa memberi end, program ini pasti error.

2. Biasakan memberikan indentasi pada baris kode baru di dalam sebuah blok. Misalnya, alih-alih
Kode: [Pilih]
if kondisi
if kondisi2
program
else
program
end
else
program
end
yang terlihat membingungkan, biasakan
Kode: [Pilih]
if kondisi
  if kondisi2
    program
  else
    program
  end
else
  program
end
Lebih enak kan bacanya?

3. Jika perlu, berikan komentar pada program. Komentar adalah baris yang tidak akan pernah dijalankan oleh program kita. Ini sangat berguna untuk memberikan keterangan apa yang program kita lakukan, walaupun program yang ditulis dengan baik kadang-kadang tidak memerlukan komentar. Dianjurkan memberikan komentar apabila program kita sudah cukup kompleks, supaya kita bisa mengingat kembali apa yang program kita lakukan sewaktu membaca ulang di kemudian hari dan supaya orang lain juga bisa memahami program kalian. Komentar dalam Ruby ditandai dengan #. Contoh:

Kode: [Pilih]
# Cek jenis kelamin
# Kalau pria...
if sex == "L"
  # Sambutan maskulin
  p "Hi, Mas!"
end

Lanjut!
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
WAYN http://Exsharaen.wayn.com
About.me http://about.me/hoshiro.exsharaen

Offline Èxsharaèn

  • Pölisia mar Ranch-i-ru
  • Administrator
  • Lv 9 Petualang senior
  • ************
  • Tulisan: 5.650
  • Karma: 8
  • Jenis kelamin: Pria
  • Veni, veni, venias; ne me mori facias...
  • Bergabung sejak: 14/10/2006
    YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • RPG Fantasy Web Indonesia
Perulangan
« Jawab #14 pada: 27 Mei 2007, 11:02:50 »
Suatu saat, kita ingin melakukan potongan program yang sama berulang kali. Apa cara termudah untuk melakukannya? Copy-paste. Tapi apa yang terjadi kalau ternyata ada satu saja baris yang berubah? Bagaimana kalau kita tidak tahu harus berapa kali mengulang potongan program tersebut?

Karena itulah, sekarang kita berkenalan dengan...

Perulangan

Istilah kerennya loop. Untuk menyatakan perulangan, ada beberapa cara yang bisa ditempuh, tergantung apakah kita tahu harus mengulang berapa kali.

Kalau kita tahu berapa kali perulangannya...

Blok for praktis digunakan untuk perulangan yang diketahui jumlahnya. Bentuknya seperti ini:

Kode: [Pilih]
for variabel_penghitung in range
  program perulangan di sini
end
Ingat ya, range didefinisikan dengan nilai_awal .. nilai_akhir atau nilai_awal ... nilai_akhir. Nanti kita akan tahu bahwa range bisa juga tidak berupa jangkauan angka, tapi jangkauan dalam benda lain.

Misalkan begini. Tahu faktorial? 2! adalah 2 * 1, 4! adalah 4 * 3 * 2 * 1. Ayo kita coba buat programnya!

Kode: [Pilih]
p "Masukkan angka:"
angka = gets.chomp.to_i
faktorial = 1
for i in 1 .. angka
  faktorial *= i
end
p angka.to_s + "! = " + faktorial.to_s
Coba masukkan angka sembarang dan cobalah hitung dengan kalkulator biasa. Hasilnya sama kan?

Operator *= adalah bentuk khusus dari operator perkalian. Operator ini mengalikan nilai variabel tersebut dengan operand, hasilnya disimpan ke variabel itu sendiri. Jadi, variabel *= operand sama artinya dengan variabel = variabel * operand. Ini berlaku untuk nyaris semua operator aritmatika, misalnya +=, -=, /=.

Kalau perulangannya tidak diketahui...

Blok for tidak dapat mengatasi hal ini. Maka, kita berkenalan dengan blok while. Bentuknya seperti ini:

Kode: [Pilih]
while kondisi
  program yang harus diulang
end
Blok while akan melakukan apa saja yang ada di dalamnya, selama kondisinya terpenuhi.

Nah, hati-hati saat menggunakan blok ini. Pastikan untuk selalu mengubah kondisi yang harus dicek agar perulangan itu bisa berhenti. Kalau kondisinya tidak pernah berubah, perulangan bisa saja tidak pernah berhenti. Ini dikenal dengan infinite loop. Infinite loop sangat menguras memori dan CPU. Andaikan program kita terjebak dalam infinite loop, hentikan secara paksa dengan menekan tombol Ctrl + Break.

Contoh! Program faktorial kita di atas bisa diubah menggunakan blok while seperti berikut:
Kode: [Pilih]
p "Masukkan angka:"
angka = gets.chomp.to_i
faktorial = 1
i = 1
while i <= angka
  faktorial *= i
  i += 1 # Jangan lupa baris ini! Coba hilangkan, akan terjadi infinite loop
end
p angka.to_s + "! = " + faktorial.to_s

Ada blok lain yang mirip dengan while, namanya until. Bentuknya sama persis:
Kode: [Pilih]
until kondisi
  program yang harus diulang
end
Bedanya, blok ini akan terus dilakukan selama kondisinya tidak terpenuhi. Program baru keluar dari blok ini saat kondisi terpenuhi. Coba ubah program di atas menggunakan blok until!

Ada juga bentuk perulangan lain seperti berikut:
Kode: [Pilih]
loop do
  program yang harus diulang
end
Tapi, kapan berhentinya?
« Edit Terakhir: 01 April 2008, 02:26:50 oleh Èxsharaèn »
Jangan lupa ikutan serunya petualangan Our Journey!
~ A, èxshna il utnön qu our journey shallaran a èndh... ~

Profiles
WAYN http://Exsharaen.wayn.com
About.me http://about.me/hoshiro.exsharaen

Tags:
 

Dengan Jawab-Cepat Anda dapat menggunakan kode buletin board dan smiley seperti tulisan normal, tapi jauh lebih menyenangkan.

Peringatan: topik ini belum dituliskan setidaknya 120 hari.
Kecuali Anda yakin ingin menjawabnya, harap pertimbangkan untuk memulai sebuah topik baru.

Nama: Email:
Anti-spam: complete the task