Belakangan saya sedang mengerjakan project Ruby dimana boleh dibilang legacy code lumayan jadul dan jarang disentuh. Salah satu hal yang saya temui adalah ada method yang memiliki parameter sekitar 9 parameter.

Hal ini sangat menyulitkan refactoring jika ada perubahan kode atau penambahan fitur. Jika ketemu method Ruby yang memiliki parameter lebih dari tiga, hal yang wajib saya lakukan dan jika memungkinkan dikerjakan adalah refactoring dengan keyword argument.

Kenapa wajib pakai keyword argument?

  1. Saat method dipanggil, variabel sebagai inputan parameter lebih dari tiga rawan tertukar.
  2. Tanpa keyword argument, kode sulit dibaca.

Contoh tanpa keyword argument.

class Example
  def my_method(param1, param2, param3 = nil, param4)
    puts "#{param1} - #{param2} - #{param3} - #{param4}"
  end
end

var1 = 1
var2 = 2
var3 = 3
var4 = 4
ex = Example.new

# Tanpa keyword argument, rawan tertukar
# Misal var1 seharusnya untuk param1, tapi justru var4 yang menjadi input
ex.my_method(var4, var2, var1, var3)

Contoh dengan keyword argument.

class Example
  def my_method(param1:, param2:, param3: nil, param4:)
    puts "#{param1} - #{param2} - #{param3} - #{param4}"
  end
end

var1 = 1
var2 = 2
var3 = 3
var4 = 4
ex = Example.new

# Dengan keyword argument, kemungkinan tertukar sangan kecil
# karena walau posisi berubah parameter saat dipanggil tertukar, tetap aman.
ex.my_method(param4: var4, param2: var2, param3: var3, param1: var1)

# Karena param3 default nil, dapat pula dipanggil seperti ini
ex.my_method(param4: var4, param2: var2, param1: var1)

Namun perlu diingat, saat refactoring pastikan unit test sudah ada agar kita dapat yakin hasil refactoring tidak bikin error.