Yukihiro "Matz" Matsumoto

Often people, especially computer engineers, focus on the machines. They think, "By doing this, the machine will run fast. By doing this, the machine will run more effectively. By doing this, the machine will something something something." They are focusing on machines. But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. We are the masters. They are the slaves.
Yukihiro "Matz" Matsumoto, Creator of Ruby

Kamis, 30 Oktober 2014

Implementasi Custom Validator Pada Model Rails

Validasi merupakan hal yang paling fundamental dalam model objek Rails anda, apabila anda tidak menggunakan validasi dengan baik, maka data di dalam tabel database anda akan dipenuhi dengan inkonsistensi. User dapat menginput data yang tidak sesuai dengan keinginan anda pada saat melakukan pengisian dalam form dan tidak mendapatkan peringatan apa-apa.

Pada kesempatan kali ini, saya ingin berbagi tips dalam melakukan impelementasi kustom validator. Rails memberikan banyak sekali validasi yang dapat anda gunakan seperti presence, length, numericaliy, inclusion, format. Ada kalanya anda ingin membuat sendiri validasi kustom yang dapat anda gunakan dalam melakukan validasi pada model.

Sebagai contoh misalnya anda ingin melakukan validasi pada nomor telepon dengan format "0411-3611419". Apabila user memasukkan nomor telepon dengan format 04113611419 maka validasi akan gagal. Dengan menggunakan kustom validasi, kita dapat menetapkan validasi sesuai dengan kondisi yang kita inginkan.

Pertama-tama dibuat terlebih dahulu file berisi validator yang akan kita gunakan. Pada contoh ini file-file validator ditempatkan didalam folder apps/validators. Folder ini tidak secara default dibuat oleh Rails, sehingga anda harus membuatnya sendiri. Dalam folder ini, akan diisi file berisi custom validator yang akan kita buat.



Untuk dapat mengatur agar Rails melakukan load ke dalam path validators ini, perlu anda tambahkan kode ke dalam config/application.rb agar Rails menambahkan path tersebut pada saat melakukan loading.

config.autoload_paths += %W("#{config.root}/app/validators")

Selanjutnya di dalam file yang akan kita jadikan validator, kita isi kode yang akan menjadi validator custom yang akan kita buat. Penamaan dari validator ini cukup krusial, format yang digunakan adalah "NameValidator" dimana name merupakan nama validator yang akan kita pakai. Sebagai contoh disini nama validator yang akan dipakai adalah phone, sehingga penamaan kelasnya menggunakan PhoneValidator.

Class PhoneValidator < ActiveRecord::EachValidator

  def validate_each(record, attribute, value)
    if not value =~ /\b[0-9]{3,4}-[0-9]{7,12}\b/
      record.errors[attribute] << (options[:message] || "Please input valid Indonesian telephone number")
    end
  end
end

Cusom validator ini menggunakan inheritansi dari kelas ActiveRecord::EachValidator sebagai kelasnya. Kemudian digunakan method validate_each dengan argumen berupa record, attribute, dan value. Di dalamnya digunakan if condition dimana bila value tidak memenuhi syarat dari regex maka akan terjadi kegagalan dalam validasi dan kemudian akan diberikan pesan error ke dalam objek.

Setelah proses ini selesai, anda dapat mengimplementasikan custom validator ini kedalam model objek anda seperti contoh dibawah ini.


Selanjutnya untuk melakukan test secara dapat, anda dapat membuka rails console melalui command-line untuk melakukan pengecekan secara langsung.


Pada kode di atas, telephone diberikan nilai dengan string "xxx" yang merupakan format yang salah untuk dilakukan pengecekan apakah validasi error berhasil dijalankan. Dari hasil yang didapat terlihat bahwa validasi berhasil dilakukan dengan melihat pesan errors dengan key telephone. Selanjutnya dilakukan koreksi dengan format telepon yang benar, dan dilakukan validasi. Dapat dilihat bahwa pesan error sudah tidak ada kareana validasi yang dilakukan telah berhasil dan memenuhi syarat.

Semoga tips ini bermanfaat bagi anda. Happy Railings!!!

Rabu, 29 Oktober 2014

Menggunakan Rake Task Untuk Menghapus Data Dalam Tabel Database Rails

Apabila anda ingin menghapus data yang ada dalam tabel database anda secara keseluruhan, saya akan berbagi tips dalam menghapus data dengan membuat Rake task. Langkah yang pertama kali anda lakukan adalah dengan membuat file dengan nama utilites.rake di dalam folder lib/tasks. Kemudian anda tuliskan kode dibawah ini

namespace :utilities do

  desc "Clear database table"

  task :clear_db => :environment do |t, args|

    ActiveRecord::Base.establish_connection
    ActiveRecord::Base.connection.tables.each do |table|

      #memastikan bahwa tabel yang berisi schema migrations anda tidak dihapus
      next if table == "schema_migrations"

      #uncomment code di bawah baris ini apabila anda menggunakan MySQL dan PostgreSQL
      #ActiveRecord::Base.connection.execute("TRUNCATE #{table}")

      #uncomment code di bawah baris ini apabila anda menggunakan SQLite
      #ActiveRecord::Base.connection.execute("DELETE FROM #{table}")


    end
  end
end

Save filenya, dan kemudian anda dapat menjalankannya dari command line menggunakan syntax rake utilities:clear_db. Selanjutnya semua data/row didalam tabel database anda akan dihapus. Cara ini saya dapatkan dari buku Easy Active Record karangan W. Jason Gilmoire yang dapat anda beli secara digital di Leanpub. Semoga tips ini bermanfaat bagi anda.


Dasar YAML Pada Ruby

YAML yang merupakan singakatan dari Yet Another Markup Language adalah bahasa markup yang dibuat untuk menyimpan struktur dari sebuah data. Struktur dari bahasa ini dapat anda lihat dibawah ini:


File YAML diatas berisi sebuah array yang didalamnya terdiri dari sebuah hash, sebagai contoh elemen pertama dari array ini adalah hash dengan key berupa game, year, dan manufacturer. Untuk membuka file YAML dalam Ruby, anda dapat menggunakan standar library YAML.


Dengan mengimport library YAML menggunakan require maka anda dapat menggunakan kelas YAML untuk melakukan manipulasi terhadap file YAML.  Pada kode di atas, variabel game_list digunakan untuk menyimpan array yang berisi hash yang dibuka dengan menggunakan method load_file beserta argumen berupa lokasi file dalam komputer anda.


Anda dapat menggunakan cara yang sama untuk mengakses value dari hash menggunakan key yang ada. Anda dapat menggunakan data ini pada objek atau tabel database yang anda buat untuk diasosiasikan dengan data ini.

Untuk melakukan penyimpanan dari objek anda ke dalam file YAML anda dapat menggunakan method to_yaml seperti contoh dibawah ini.


Menggunakan File.open beserta argumen berupa nama file yang akan kita gunakan dalam menyimpan YAML, digunakan blok dan didalmanya menggunakan method write dengan argumen berupa array game_list yang akan kita simpan ke dalam file YAML.

Hasilnya dapat kita lihat dibawah ini dengan menggunakan text editor.



Untuk anda yang ingin mengetahui lebih jelas mengenai YAML, dapat melihatnya secara langsung di Wikipedia. Di lain waktu saya akan memberikan tips dalam menggunakan file YAML sebagai seeds data pada database Rails.

Kamis, 23 Oktober 2014

Kustomisasi Form Error Rails Bagi Pengguna Bootstrap

Bagi anda pengembang Rails yang menggunakan framework Bootstrap dalam mendesain form bagi website anda, tentu tahu bahwa Boostrap memiliki framework yang sangat lengkap dalam menangani berbagai macam tampilan dalam form anda. Pada saat anda ingin mengindikasikan terjadi kesalahan pada validasi form anda, anda dapat menggunakan class has-error.

Saya akan berbagi tips mengenai langkah yang saya gunakan dalam menghandle warning pada form validasi yang bermasalah. Secara default, rails akan membungkus form yang mengalami kegagalan dalam validasi di dalam div dengan class field_with_errors.

Pada gambar di atas, anda dapat melihat bahwa pada form description terjadi kegagalan dalam validasi, tetapi bagi anda yang menggunakan  Bootstrap tidak mendapatkan tanda-tanda visual bahwa telah terjadi kegagalan validasi pada form. 

Langkah yang akan dilakukan adalah dengan memanipulasi kode yang menghasilkan div ini melalui file config.rb dalam config/application.rb. Tambahkan kode dibawah ini didalam file tersebut dalam kelas Applications.


Setelah itu lakukan test kembali dengan sengaja melakukan kesalahan pada validasi form untuk melihat hasilnya.


Dapat dilihat form yang gagal dalam validasi akan memiliki warna merah menandakan terjadi kesalahan. Dilihat pada Chrome Dev Tool, terlihat bahwa class has-error telah ditambahkan pada div field_with_errors. Semoga tips ini dapat bermanfaat bagi anda semua. Happy Railings.


Rabu, 22 Oktober 2014

Menggunakan Bootstrap Pada Aplikasi Rails

Untuk anda yang ingin menghemat waktu dan biaya dengan menggunakan framework CSS Bootstrap untuk layout desain dari aplikasi Rails anda. Anda dapat mengikuti langkah berikut untuk melakukan installasinya. Instalasi dilakukan menggunakan Bootstrap-Sass. Sassy CSS sendiri merupakan preprocessor yang digunakan untuk memudahkan anda dalam menggunakan sintaks-sintaks khusus dalam file CSS anda seperti menggunakan nesting dan penamaan. 

  • Pertama masuk ke dalam gemfile aplikasi anda dan tambahkan gem bootstrap-sass

  • Jalankan command bundle install pada Terminal untuk memastikan gem yang baru anda tambahkan terinstall ke dalam aplikasi anda
  • Masuk ke file application.css di dalam folder app/assets/stylesheets/, kemudian tambahkan ekstensi .scss untuk dapat menggunakan SASS. Tambahkan 2 line kode berikut untuk mengimport Bootstrap dalam file CSS anda

  • Hal yang paling terakhir adalah menambahkan Javascript Bootstrap ke dalam file application.js dalam folder app/assets/javascripts/. Pastikan urutan kode anda sesuai dengan urutan dibawah ini

  • Setelah semua proses selesai anda dapat menggunakan semua framework CSS Bootstrap mulai dari grid sistem, tipografy, form, table, berbagai tampilan yang membutuhkan javascript seperti modal, carousel, dan yang lainnya. Semua dapat anda langsung lihat di dokumentasi website Bootstrap. Happy CSSing!






Senin, 20 Oktober 2014

Konsep Dasar Test Driven Development Pada Rails

Dalam mengembangkan suatu fitur baru didalam website, dikenal istilah Test Driven Development dalam proses pengembangan. TDD merujuk pada suatu pendekatan dimana kita melakukan list dari spesifikasi fitur yang kita inginkan dalam aplikasi web, menjalankan tersebut dengan hasil fail, melakukan penulisan kode agar hasil dapat dilalui dengan success, kemudian setelah tes berhasil, dilakukan refactor untuk meningkatkan kualitas kode yang ditulis. Proses ini sering disebut, red(fail)-green(success)-blue(refactor). 

Dengan melakukan pendekatan ini, programmer dapat lebih meningkatkan kepercayaan diri mereka akan kode-kode yang mereka tulis, karena kode harus melewati tahapan green terlebih dahulu untuk mengetahui apakah tidak ada kesalahan atau typo dalam penulisan kode. Cara ini mungkin terlihat lamban bagi anda yang baru pertama kali mengenalnya, saya juga mengalami hal yang sama. Sebelumnya, saya tidak pernah melakukan test secara intensif pada kode yang saya tulis, sehingga hampir selalu terjadi error yang sangat sulit saya deteksi dan saya harus buka tutup browser, reload page untuk melakukan debugging sehingga menghabiskan waktu yang cukup lama. Untuk beradaptasi terhadap TDD adalah anda harus terus berlatih dalam menggunakannya sampai pendekatan ini benar-benar menjadi kebiasaan anda dalam penulisan kode.

Berikut saya akan memperlihatkan konsep dasar dalam penulisan kode Rails menggunakan pendekatan TDD ini. Untuk test library yang saya gunakan adalah berupa RSpec dan Capybara. Untuk melihat instalasinya pada aplikasi Rails anda dapat melihat pada artikel ini, RSpec pada Rails.

Contoh ini akan mengimplementasikan fitur routing pada web.


Didalam folder spec, dibuat terlebih dahulu folder baru dengan nama features yang akan menampilkan spec fitur-fitur baru yang akan dibuat. Dalam contoh, ini dibuat spec list product yang akan menampilkan produk dalam route products_path. Dalam file spec, terlebih dahulu diimpor rails_helper yang akan digunakan RSpec dalam menggunakan konfigurasi yang ada. Kemudian digunakan kata kunci describe yang memberikan blok untuk mendeskripsikan konteks dari test yang akan kita lakukan, dimana pada saat ini kita akan menamplikan list indeks dari produk. Di dalam blok deskripsi ini kita akan memberikan test-test yang akan kita lakukan dengan kata kunci it beserta penjelasan dari test yang akan menerima blok berisi ekspetasi yang kita harapkan dari test tersebut.

Dalam spek test diatas, diharapkan agar user sukses menuju ke http://www.example.com/products. Digunakan method RSpec expect untuk melakukan pengecekan apakah path yang berhasil dikunjugi sama dengan products_path.



Tentu saja hasil yang dihasilkan adalah failure, karena belum dibuat implementasi dari kode ini. Hal yang penting disini adalah kita tidak panik dan takut dengan deskripsi error yang dihasilkan, melainkan kita langsung menganalisa error tersebut. Di sini terlihat deskripsi no route matches [get] products, yang berarti Rails belum mengetahui routes /products dalam konfigurasinya. Dari error ini, kita dapat langsung mengimplementasikan kode yang akan kita buat agar hasil nya menjadi hijau atau success.



Pada konfigurasi routes.rb ditambahkan route GET yaitu products yang akan merespon pada action index pada products controller. Kita lakukan lagi test pada RSpec...


Hasil yang didapatkan masih tetap failure, tetapi dengan deskripsi error yang berbeda, sekarang deskripsinya berupa unitialized constant product controller. Langkah berikut yang harus kita lakukan adalah membuat product controller dengan Rails generator beserta method index didalamnya.


Menggunakan rails generator command untuk membuat controller products, disini digunakan kata products dalam bentuk plural sebagai konvensi dari Rails bahwa kontroller menampilkan objek dalam bentuk plural. Berbeda dengan model yang menggunakan bentuk singular.


Setelah products controller berhasil dibuat, berikutanya kita tambahkan method index ke dalam products controller tersebut. Berikutnya kita akan melakukan test lagi melalui Rspec.


Hasil yang diberikan adalah failure dengan deskripsi bahwa Rails tidak menemukan template view untuk ditampilkan yang dalam konvensi rails sesuai dengan nama action yang kita berikan yaitu, index.html.erb dalam folder views/products. Berikut kita akan membuat file tersebut melalui sublime text.


File ini terletak pada path app/views/products, dan digunakan file dengan ekstensi html.erb yang merupaka konvensi dari Ruby untuk menampilkan html yang akan kita tampilkan pada pengguna.
Selanjutnya kita akan melakukan test akhir karena semua kode telah berhasil kita buat, kita akan mengecek apakah ada kesalahan/typo yang kita lakukan pada penulisan kode.


Hasil yang dihasilkan adalah success, test yang dilakukan berhasil untuk menuju ke products_path dan memastikan url yang dituju sama dengan products_path. Apabila anda ingin melakukan refactor code, anda dapat melakukannya, dan pastikan agar hasil yang diberikan melalui RSpec tetap memberikan hasil success.

Begitulah proses secra garis besar yang dilakukan pada saat kita melakukan pengembangan dengan pendekatan TDD. Proses ini memakan waktu yang lebih lama, tetapi dapat meningkatkan kepercayaan diri akan keakuratan kode yang telah kita buat. Saya menganjurkan anda yang belum pernah menggunakan TDD agar mencoba terbiasa untuk menggunakan pendekatan ini, karena pendekatan ini sangat berfungsi dalam jangka panjang, apalagi bila anda mengerjakan proyek dalam skala besar.

Sabtu, 18 Oktober 2014

Kustomisasi Tampilan Output RSpec Pada Rails

Untuk anda yang menggunakan RSpec sebagai unit testing anda pada program Rails yang anda kembangkan, terkadang anda membutuhkan detail yang lebih lengkap terhadap test yang sukses dan gagal. Anda dapat menggunakan syntax berikut di command line:


Output yang dihasilkan yaitu setiap test yang anda telah buat di file spec anda dengan pemberian warna hijau untuk test yang berhasil, merah untuk test yang gagal, dan kuning untuk test yang masih pending.

Untuk anda yang malas untuk mengetik flag --color --format doc, dapat menambahkan parameter di file konfigurasi .rspec yang ada pada root direktori aplikasi Rails anda. Tambahkan sintaks pada gambar di bawah ini. Sehingga secara default rspec anda menggunakan flag ini pada saat anda menggunakan rspec.

Jumat, 17 Oktober 2014

Menggunakan RSpec dan Capybara Sebagai Default Test Unit Pada Rails

Sebagai seorang developer Rails, kebanyakan pengembang menggunakan pendekatan TDD(Test Driven Development) dalam mengembangakan suatu aplikasi web, dimana pertama-tama spesifikasi terhadap situs dibuat, dilakukan tes, gagal, kemudian dilakukan penulisan kode sampai test berhasil.

Rails secara default menggunakan library Test::Unit yang ada pada standard Ruby library dalam melakukan testing. Tetapi, untuk anda yang ingin menggunakan library test yang lain seperti MiniTest, Cucumber, dan RSpec dapat menggunakan library tersebut dengan melakukan installasi dengan menggunakan gemfile dan bundle.

Berikut adalah langkah untuk menggunakan RSpec dan Capybara sebagai testing unit saat anda membuat aplikasi Rails yang baru.

  • Pada saat anda membuat aplikasi baru, menggunakan command line sertakan flag --skip-test-unit atau -T. Dengan melakukan ini, Rails tidak akan mengikutkan folder spec secara default pada kerangka aplikasi.




  • Setelah semua file dan bundle awal selesai dibuat, masuk ke folder aplikasi anda dan edit file dengan nama Gemfile. Tambahkan kode yang ada dibawah ini untuk menambahkan gem rspec-rails dan capybara. Disini gem rspec diinstal dalam grup environment development dan test, sedangkan gem capybara hanya akan diinstal dalam grup environment test.

  • Masuk pada direktori aplikasi Rails anda pada terminal dan jalankan sintaks bundle install untuk melakukan installasi pada kedua gem yang baru anda tambahkan.
  • Setelah selesai jalankan sintaks rails g rspec:install. Berikutnya secara otomatis, Rails akan membuat folder spec yang anda dapat gunakan dalam melakukan testing menggunakan RSpec.
  • Untuk memastikan RSpec dapat digunakan pada aplikasi Rails anda, ketik rspec pada command line di terminal pada ditektori aplikasi anda.



Konversi Angka Kedalam Format Currency Dengan Rails NumberHelper

Apabila anda mempunyai data yang berupa angka yang merepresentasikan kurs mata uang tertentu dalam database anda, tentunya pada saat anda ingin menampilkan angka tersebut, anda menginginkan agar tampilan representasi dari angka tersebut sesuai dengan penulisan kurs mata uang secara umum.

Rails memiliki built in NumberHelper class yang membantu anda untuk melakukan format pada tampilan angka anda ke dalam bentuk kurs. Method ini memiliki nama number_to_currency. Untuk melakukan testing secara langsung terhadap cara kerja method ini anda dapat langsung mencobanya dengan menggunakan rails console dengan mengetik rails console di comman line terminal anda.

Method ini menerima 2 argumen, numbers_to_method(number, option = {}). Yang pertama sebagai parameter wajib adalah angka yang ingin diformat, yang kedua adalah hashes opsional yang berisi bermacam-macam key seperti locale, unit, separator, delimiter.


Pada kode diatas, menggunakan rails console, method helper ini dapat diakses dengan menggunakan variable helper. Pada kode yang pertama diberikan nilai 500 sebagai argumen, dan hasil yang dikeluarkan adalah string $500.00. Secara default, method ini menggunakan format locale dari sistem yang sedang kita gunakan. Untuk melakukan kustomisisasi anda dapat menggunakan parameter opsional yang berada dalam hashes. Pada contoh di atas, digunakan unit dengan value Rp, separator dengan nilai , yang digunakan sebagai separator pada untuk nilai fraksi angka anda, dan yang terakhir adalah delimiter yang digunakan sebagai pembatas pada 3 tiap digit angka anda. Hasil yang dikeluarkan untuk 1000000 adalah Rp1.000.000.000,00.

Semoga tips ini bermanfaat untuk anda yang menggunakan RAILS untuk mengembangkan online store atau segala sesuatu yang berhubungan dengan uang.

Selasa, 14 Oktober 2014

Dasar Operasi Standar IO Melalui File

Melakukan operasi IO pada File sangatlah mudah didalam Ruby. Standard library yang ada didalam Ruby memudahkan setiap orang untuk membuat, memanipulasi sebuah file untuk dibaca maupun ditulis. Objek File merupakan objek utama yang dapat digunakan dalam melakukan standar operasi IO ke sebuah file yang kita berikan.

Dalam memanipulasi suatu file, kita perlu memberikan mode operasi apa yang akan kita berikan dalam memanipulasi, apakah kita akan hanya membacanya, menulis, menulis dan membaca. Berikut adalah daftar mode operasi yang dapat kita gunakan saat melakukan operasi pada suatu file.

  • r : Mode read-only (default), mode hanya untuk membaca file, pointer ditaruh pada bagian awal file
  • r+ : Mode ini dapat digunakan untuk membaca dan menulis ke dalam file, pointer ditaruh pada bagian awal file
  • w : Mode write-only, mode hanya untuk melakukan penulisan file. Akan dilakukan penulisan ulang dari awal bila file eksis, apabila file tidak eksis, maka file baru akan diciptakan, dan penulisan akan dimulai dari bagian awal file
  • w+ : Mode read-write, mode untuk membaca dan menulis file. Akan dilakukan penulisan ulang dari awal bila file eksis, apabila file tidak eksis, maka file baru akan diciptakan, dan penulisan akan dimulai dari bagian awal file
  • a : Mode append dan write-only, mode untuk menulis file. Apabila file eksis maka, penulisan akan dimulai dari bagian paling akhir file (append/penggabungan), sedangkan bila file tidak eksis, maka file baru akan diciptakan
  • a+ : Mode append, serta read-write. Mode ini dapat membaca dan melakukan penulisan kedalam file. Apabila file eksis maka, penulisan akan dimulai dari bagian paling akhir file (append/penggabungan), sedangkan bila file tidak eksis, maka file baru akan diciptakan

Menciptakan File

Cara paling dasar untuk membuat file dalam Ruby adalah menggunakan objek File diikuti dengan method new dengan memberikan argumen berupa nama file dan mode operasi penulisan yang akan digunakan (w).


Dari kode di atas, maka akan diciptakan file dengan nama x pada folder dimana irb sedang dijalankan.  Untuk melakukan penulisan kedalam file anda dapat menggunakan instance objek file yang anda telah ciptakan dan menggunakan method puts.


Setiap string yang ditaruh menggunakan method puts akan ditempatkan pada baris baru, dan untuk melakukan save dan membebaskan program dari segala resources anda dapat menggunakan method close pada instance objek file anda. Hasilnya penulisan dapat anda lihat di bawah ini.


Membaca File

Membaca file ke dalam objek dalam Ruby dapat dilakukan dengan menggunakan method open serta memberikan argumen berupa nama file dan mode operasi yang akan dilakukan.


Kode diatas akan mencari dan membuka file dengan nama x yang berada dalam folder dimana anda menjalankan irb, dan menempatkanya dalam variabel x.


Untuk membaca isi dari file dapat digunakan method gets pada instance variabel dari objek yang telah kita buat. Method gets ini akan membaca dari baris per baris, di saat anda menggunakan method ini maka pointer akan diarahkan pada baris berikutnya. Jangan lupa untuk melakukan close pada file objek yang anda telah buat setelah anda selesai memanipulasi file menggunakan method close.

Menggunakan Blok Dalam Operasi File

Menggunakan blok dalam operasi File pada Ruby sangatlah memudahkan dan mempersingkat waktu anda dalam melakukan manipulasi dan operasi pada file. 


Dengan menggunakan class method open pada File dan memberikan argumen berupa nama file dan mode operasi maka kita menggunakan blok dalan didalam blok kita dapat menerima variabel berupa instance objek file yang akan kita manipulasi. Anda dapat dengan cepat melakukan manipulasi berupa penulisan pada file dan pada saat blok selesai dijalankan maka file akan ditutup secara otomatis dan resourcenya akan dibersihkan.


Untuk membaca file dengan menggunakan method each_line pada objek file juga sangat memudahkan programmer dalam mengambil data pada tiap baris dalam file. Di dalam blok akan diberikan objek berupa line, yang dimana berisi isi dari iterasi tiap line yang ada didalam file tersebut untuk dibaca.

Untuk membaca lebih jauh lagi mengenai operasi IO pada Ruby, anda dapat membaca dokumentasi Ruby secara langsung. Semoga tips ini bermanfaat bagi anda semua.




Senin, 13 Oktober 2014

Menggunakan Simbol Sebagai Key Dalam Hash

Hash adalah data struktur yang sangat sering digunakan dalam Ruby. Hash merupakan struktur data yang menyimpan kumpulan data dalam dalam bentuk berpasangan antara key dan value. Key digunakan untuk mendapatkan value yang disimpan di dalam suatu hash.


Pada snippet di atas, variabel people yang berupa hash dibuat dengan satu key values, yaitu key berupa string "alfian" dengan nilai 60. Untuk mengaksesnya kita dapat menggunakan key "alfian" seperti didalam kita mengakses elemen didalam suatu array. Anda juga dapat menambahkan key, values ke dalam array dengan menggunakan cara yang sama untuk mendapatkan value dengan key yang anda inginkan, dan pada bagian akhir anda melakukan assign value yang anda inginkan. Untuk melihat semua keys dan values yang terdapat pada hash anda dapat melakukannya langsung dengan mengetik variable hash tersebut. Dengan method keys dan values anda juga mencari kumpulan nilai masing-masing dalam array untuk keys dan values.

Penggunan Simbol Dalam Hash

Simbol adalah nilai konstan khusus yang memiliki kemiripan dengan string, tetapi simbol adalah suatu konstan yang mempunyai tingkat efisiensi yang lebih baik, karena sekali anda menggunakan simbol, maka simbol dengan referensi yang sama akan digunakan oleh Ruby dalam eksekusi program anda dari awal sampai akhir. Ruby tidak menciptakan objek simbol baru seperti pada string. Simbol pada Ruby dituliskan dengan menggunakan awalan : dan diikuti dengan string yang akan menjadi nama dari simbol.


Dari snippet diatas, kedua objek yang berupa simbol dibuat dan dianalisa referensinya menggunakan method object_id, hasil yang dihasilkan adalah sama. Sedangkan di saat menggunakan string sebanyak 2 kali, dihasilkan referensi yang berbeda pada setiap kali object_id dari string dianalisa. Disini dapat dilihat bahwa simbol memiliki efisiensi yang lebih baik dari string dalam efisisensi memori dalam suatu program, karena akan digunakan simbol dengan referensi yang sama dalam memori anda sepanjang eksekusi program anda berjalan. Apabila anda memiliki sebuah string, anda dapat mengonversinya menjadi sebuah simbol dengan menggunakan method to_sym.


Para programmer Ruby, kebanyakan menggunakan simbol sebagai key dalam membuat suatu hash. Di dalam Rails, simbol hampir seluruhnya dipakai dalam setiap built-in method yang ada. Menggunakan hash sebagai key didalam membuat suatu hash tidaklah terlalu berbeda dibandingkan menggunakan string.


Dari snippet kode diatas, terlihat cara yang digunakan dalam menggunakan simbol sebagai key didalam hash tidaklah terlalu berbeda dibanding menggunakan string, anda menggunakan tanda : dan menghilangkan double quote pada string anda diikuti dengan operator hashrocket => dan value yang ingin anda simpan. Anda juga dapat menggunakan shortcut dalam menggunakan simbol sebagai key dalam membuat hash, dimana anda dapat langsung menggunakan nama simbol diakhiri dengan : dan value yang anda inginkan. Silakan anda mencobanya langsung didalam irb dan Happy Hashing!.

Sabtu, 11 Oktober 2014

Iterasi Array Dengan Select, Reject, Partition, Reduce, Sort_By Menggunakan Blok

Array merupakan struktur data yang sangat sering dimanipulasi dalam suatu program, terkadang kita ingin menyusun array dengan syarat tertentu, mengurutkan array dengan aturan tertentu, melakukan operasi aritmetik pada elemen-elemen yang ada di dalam array. Berikut saya akan berbagi tips yang memudahkan anda untuk melakukan iterasi array menggunakan beberapa method yang menerima blok dalam pengoperasiannya.

Select dan Reject

Select digunakan untuk menyeleksi elemen dan membentuk array dengan elemen tersebut sesuai dengan kondisi dan syarat yang kita inginkan.


Dalam snippet kode di atas, pertama array dibentuk menggunakan range angka 0-10, kemudian dilakukan chain dengan method to_a untuk mengkonversi angka yang dihasilkan ke dalam array. Kemudian method select digunakan untuk menyeleksi elemen dan membentuk array baru dengan syarat angka yang akan dipilih adalah angka yang lebih kecil atau sama dengan 5. Hasil yang dihasilkan yaitu, 0, 1, 2, 3, 4, 5.


Method reject memiliki makna yang berlawanan dengan method select, disini method reject digunakan dengan syarat bahwa angka yang mempunyai nilai lebih kecil atau sama dengan 5 tidak akan dimasukkan ke dalam array yang baru. Array baru yang dihasilkan mempunyai nilai 6, 7, 8, 9, 10, yang semuanya lebih dari 5.

Partition

Partition digunakan untuk membagi satu array menjadi 2 array, pembagian dilakukan dengan syarat dan kondisi yang dapat kita berikan di dalam blok.



Pertama Array dibentuk dengan range 0-10. Kemudian digunakan multiple assignment ke variabel odd dan even dengan menggunakan method partition pada array numbers. Partisi dilakukan dengan syarat apakah angka dalam tiap iterasi adalah bilangan ganjil. Method odd? dapat digunakan pada objek angka untuk mengetahu apakah angka tersebut merupakan angka ganjil. Hasil yang dihasilkan berupa satu array yang didalamnya berisi 2 array, yang pertama adalah array berisi bilangan ganjil, dan yang kedua adalah sisanya, yaitu array yang berisi bilangan genap. Ruby secara otomatis akan menempatkan array pertama pada variabel odd, dan array kedua pada variabel even.

Reduce 

Reduce seringkali digunakan untuk melakukan operasi aritmetik pada bilangan yang ada dalam array. Operasi aritmetik akan dilangsungkan dan menghasilkan suatu bilangan akhir sebagai hasil dari method ini. 


Array yang berisi angka 1-10 tetap digunakan sebagai contoh. Method reduce digunakan dan di dalam blok terdapat 2 paramaeter, yaitu sum dan n. Sum dapat kita artikan sebagai akumulasi bilangan yang akan terus kita lakukan operasi, dalam konteks disini sum dimulai dari 0, kemudian n merupakan elemen yang akan diiterasi dalam array. operasi penjumlahan digunakan, dimana pertama sum yang berupa 0 akan ditambahkan dengan 1, kemudian hasil dari sum disimpan, dan pada iterasi yang kedua akan tetap digunakan sehingga sum yaitu 1 ditambah dengan elemen ke 2, yaitu angka 2. Begitu seterusnya dilakukan sampai elemen habis diiterasi, sehingga didapatkan hasil 0+1+2+3+4+5+6+7+8+9+10 = 55.

Method reduce juga dapat menerima argumen langsung, dimana argumen yang dapat kita berikan merupakan simbol operator aritmetik yang akan digunakan dalam melakukan operasi aritmetik. Dalam contoh di atas, digunakan argumen :+ yang akan melakukan penjumlahan terhadap semua elemen dalam array. Kemudian, digunakan argumen :* yang akan melakukan operasi perkalian terhadap semua elemen dalam array.

Sort_by

Sort_by dapat digunakan untuk mengurutkan elemen yang ada dalam array sesuai dengan kondisi yang kita inginkan.


Array yang berisi nama-nama dibentuk menggunakan %w() Ruby. Kemudia digunakan method sort_by dengan kondisi bahwa string yang mempunyai nilai lebih kecil akan ditempatkan lebih awal, dalam konteks ini string "Alfian" < "Fredy" < "Harry" < "Zack.

Jumat, 10 Oktober 2014

Dasar Operasi Perbandingan Dan Kondisional Dalam Ruby

Dalam membuat suatu program, hampir selalu kita akan berhadapan dengan pilihan terhadap apa yang akan dilakukan program kita selanjutnya bila menghadapi kondisi tertentu. Kita mungkin akan melakukan hal tertentu bila suatu variabel mempunyai nilai tertentu, hal ini sering disebut branching, dimana kita perlu membuat keputusan berdasarkan kondisional nilai suatu objek.

Pada tips kali ini, saya ingin berbagi mengenai operator-operator kondisional dasar yang dapat digunakan oleh program Ruby dalam melakukan branching pada program anda. Terdapat 3 operator yang akan saya bahas, yaitu if, unless, dan case(biasanya sering dipanggil switch dalam bahasa pemrograman lain seperti C, C++, Objective-C).

Operator &&/and dan ||/or

Kedua operator ini digunakan untuk membandingkan nilai true dan false dari dua atau lebih objek atau ekspresi, setelah dilakukan perbandingan maka operator ini akan mengeluarkan nilai true atau false berdasarkan hasil dari perbandingan. Anda perlu mengetahui bahwa didalam Ruby, setiap objek yang mempunyai nilai nil dan false akan dianggap sebagai false.

Untuk operator &&, kedua objek atau ekspresi yang dibandingkan hanya akan menghasilkan nilai true hanya jika kedua objek yang dibandingkan memiliki nilai true. Jika salah satu nilai adalah false maka hasil yang dikeluarkan adalah false.



Untuk operator ||, perbandingan objek dilakukan dengan membandingkan apabila salah satu objek saja yang memenuhi nilai true, maka hasil yang akan dihailkan juga adalah true. Perbandingan dilakukan dengan melihat dari kiri terlebih dahulu, apabila mempunyai nilai true, maka nilai yang dibagian kanan akan diabaikan, dan nilai yang dihasilkan akan berupa true.


Perlu anda ketahui bahwa Ruby mengijinkan anda untuk mengganti && dengan menggunakan kata and, serta mengganti || menggunakan kata or.

Operator ==, !=, <, <=, >, >=

Operator ini digunakan untuk melakukan perbandingan ekualitas nilai suatu objek. Operator == akan menghasilkan nilai true hanya jika nilai yang dibandingkan memiliki nilai yang sama, sedangkan operator != akan menghasilkan true jika nilai yang dibandingkan memiliki nilai yang berbeda.



Untuk operator <, <=, >, >= anda dapat melihat penjelasannya dibawah ini.
  • >, akan menghasilkan true hanya jika nilai yang kita bandingkan memiliki nilai yang lebih besar
  • >=, akan menghasilkan true hanya jika nilai yang kita bandingkan memiliki nilai sama atau lebih besar
  • <, akan menghasilkan true hanya jika nilai yang kita bandingkan memiliki nilai yang lebih kecil
  • <=, akan menghasilkan true hanya jika nilai yang kita bandingkan memiliki nilai sama atau lebih kecil



If Statement

If statement digunakan apabila anda ingin menjalankan program anda hanya jika kondisi yang anda berikan memenuhi syarat yang anda berikan.




Pertama, variabel age akan digunakan untuk menyimpan nilai yang akan dimasukkan oleh user menggunakan method gets, dilanjutkan dengan method strip untuk menghilangkan whitespace dan newline, serta method to_i untuk mengonversi objek string menjadi objek fixnum. Kemudian, digunakan operator if dengan syarat age > 20, hal ini berarti syntaks yang ada didalam blok if dan end hanya akan diekseskusi jika kondisi yang diberikan memenuhi syarat. Dalam hal ini age yang memiliki nilai 25 > 20 akan menghasilkan nilai true dan syntax yang ada didalam if akan dieksekusi. Sebaliknya apabila hasil yang dihasilkan adalah false, maka syntax yang berada di dalam blok else yang akan dieksekusi.

Elsif Statement

Kita juga dapat menggabungkan beberapa kondisi if menggunakan operasional elsif, dimana akan dilakukan test pada kondisi secara berurutan mulai dari yang paling pertama sampai ke yang paling akhir.



Dapat dilihat bahwa setelah mengassign nilai 40 kedalam variabel age. Dilakukan operasi kondisional if dan elsif, pertama akan dibandingkan apakah age berada didalam rentang 0 - 9, bila tidak ada maka perbandingan akan berlanjut kedalam rentang 10 - 19. Hal tersebut akan terus berlangsung sampai bila ada kondisi elsif yang memenuhi syarat, bila tidak ada maka syntaks yang berada dalam blok else yang akan dieksekusi.

Unless Statement

Unless merupakan operator yang memiliki kemiripan dengan if tetapi mempunyai makna yang berlawanan. Perbandingan hanya akan dijalankan hanya jika nilai yang dibandingkan adalah false. Seringkali sintaks ini membuat bingung programmer yang berasal dari bahasa pemrograman seperti C, sehingga kebanyakan syntaks ini tidak digunakan, dan programmer lebih memilih menggunakan if.



Sintaks yang berada didalam unless akan dijalankan hanya jika hasil dari age > 10 adalah false, dimana pada contoh ini sintaks yang ada didalam unless berhasil diekseskusi karena age tidaklah lebih dari 10.

Tips Shortcut Eksekusi Kode Dalam 1 Baris Menggunakan If dan Unless

Anda dapat mengekseskusi kode di dalam 1 baris menggunakan if atau unless dengan cara dibawah ini.


Case Statement

Case statement atau sering disebut switch dalam bahasa pemrograman lain mempunyai fungsi yang sama dengan multiple if statement, tetapi perbedaan yang utama adalah kita dapat menentukan case objek yang akan kita bandingkan nilainya.




Disini variabel age akan digunakan sebagai case atau perbandingan. Perbandingan dilakukan dengan menggunakan kata when, dimana pada konteks ini digunakan range antara 0 - 9 pada baris pertama, dan dilanjutkan seterusnya pada baris-baris berikutnya. Apabila ada yang memenuhi nilai dari variabel age maka sintaks yang ada didalamnya akan diekseskusi, bila tidak ada maka sintaks yang ada dalam else yang akan dieksekusi. Penggunaan antara case dengan multiple if statements bergantung pada selera dari programmer, tetapi penggunaan case statement seringkali menhghasilkan kode yang lebih jelas dan singkat.