Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. ActionScript

Apa itu Configuration Object, dan Mengapa Repot Menggunakannya?

Difficulty:BeginnerLength:MediumLanguages:

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Sungguh menyakitkan harus mengubah parameter fungsi; Anda harus mengubah setiap panggilan lain ke fungsi itu untuk menghindari kesalahan. Tetapi Anda dapat menyiasatinya dengan menggunakan hanya satu parameter: obyek konfigurasi.


Seperti Ini Rupanya

Berikut ini contoh konyol dari fungsi untuk membuat robot:

Sekarang, inilah contoh yang sama, menggunakan obyek konfigurasi:

Saya telah menyoroti baris yang perlu diubah; Anda dapat melihat bahwa tidak ada banyak perbedaan.


Mengapa Repot-repot?

Jadi jika hampir tidak ada perbedaan, mengapa kita repot-repot melakukannya dengan cara kedua? Bagaimanapun, itu sebenarnya membuat fungsi sedikit lebih sulit untuk digunakan; sedangkan sebelum IDE kami dapat memberi kami informasi tentang parameter yang diharapkan fungsi:

...sekarang hanya bisa memberi kita ini:

Misalkan Anda ingin menambahkan beberapa parameter lagi: satu menentukan bahan yang akan digunakan dan yang lain untuk menentukan warna laser yang seharusnya. Itu tidak terlalu sulit, dalam kedua kasus:

Sejauh ini, masih tidak banyak perbedaan. Bagaimana jika Anda ingin semua robot memiliki laser merah? Sederhana lagi. Tanpa obyek konfigurasi, Anda hanya perlu mengubah metode signature (baris function), dan kemudian Anda dapat menghapus argumen terakhir dari panggilan fungsi:

Dengan obyek konfigurasi, ini sedikit rumit - meskipun tidak banyak:

Baiklah. Sekarang anggaplah Anda menemukan bahwa Anda mengatur hampir semua robot Anda menjadi jahat (maksud saya, mengapa tidak?), jadi sebenarnya agak merepotkan untuk menulis "kejahatan" sebagai parameter setiap waktu. Secara alami, Anda ingin mengatur "jahat" sebagai default - tetapi Anda tidak ingin mengatur materi default.

Satu-satunya cara Anda dapat melakukan ini, dengan seperangkat parameter fungsi biasa, adalah dengan mengubah urutan parameter personality dan material:

Ah, tapi sekarang Anda harus mengganti urutan putaran argumen pada setiap panggilan fungsi tunggal!

Obyek konfigurasi tidak memberi Anda masalah ini. Coba lihat:

Rapi! Semua panggilan fungsi generateRobot() lama Anda akan terus berfungsi, tetapi Anda dapat membuat panggilan baru yang tidak mengganggu dalam menentukan personality.

Anda bahkan dapat memutuskan untuk menghapus parameter personality sekaligus:

Versi fungsi di atas sama sekali tidak merujuk ke conf.personality - tetapi Anda tidak akan mendapatkan kesalahan jika Anda masih memiliki panggilan seperti ini:

Tentu saja, Anda mungkin mendapatkan beberapa pengguna yang bingung jika ada panggilan seperti ini:

...karena semua robot sekarang jahat. Tetapi setidaknya kode akan dikompilasi.

Untuk alasan yang sama, Anda dapat mengubah urutan argumen tanpa masalah sama sekali, dan bahkan menambahkan parameter baru yang belum melakukan apa pun:


Membuatnya Lebih Mudah untuk Mengatur Default

Kode untuk pengaturan default mudah dipahami sejauh ini, tetapi akan sangat menjengkelkan untuk memperpanjang jika kita perlu memiliki banyak parameter:

Mari kita menulis beberapa kode yang lebih umum untuk mengatasinya:

Perulangan for itu mungkin sedikit membingungkan, jadi saya akan memecahnya. Pertama, lihat ini:

Ini adalah perulangan for...in, yang akan menampilkan nama-nama kunci di dalam obyek default:

Selanjutnya, lihat baris ini:

Ini akan menghasilkan red - sama dengan menulis trace(defaults.laserColor).

Setelah itu, lihat contoh ini:

Menurut Anda apa yang akan dihasilkan ini?

Nah, example["demo"] sama dengan example.demo, yang sama dengan "test". Tapi example.foo tidak ada, jadi example["foo"] akan mengembalikan null. Ini berarti bahwa !example["foo"] (perhatikan tanda seru) akan sama dengan true.

Gabungkan semuanya, dan Anda harus dapat memahami mengapa kode ini bekerja:

Beri saya teriakan di komentar jika Anda butuh bantuan!

Saya ingin lebih!

Untuk versi yang lebih cepat, coba ini:

Perubahan pada Baris 1 (dan Baris 2 yang baru) berarti bahwa bahkan obyek conf itu sendiri adalah opsional, jadi Anda bisa memanggil generateRobot(). (Tentu saja, Anda harus mengubah kode untuk menangani nilai-nilai yang saat ini tidak memiliki default.)


Membantu IDE agar Membantu Anda

Seperti yang saya sebutkan di atas, IDE tidak dapat memberi Anda tips tentang parameter apa yang diharapkan oleh fungsi, jika fungsi itu menggunakan obyek konfigurasi. Ini adalah kelemahan utama, karena dapat membuat kode Anda sangat sulit digunakan; Anda harus mengingat parameter mana yang masuk dalam obyek conf, serta semua nama dan tipe mereka.

Tetapi kita masih bisa menampilkan informasi ini ke pembuat kode ketika dibutuhkan; kita hanya perlu melakukannya secara manual, seperti:

Sekarang, jika saya mulai menulis panggilan ke fungsi ini di FlashDevelop (IDE pilihan saya), saya melihat ini:

Tentu, ini agak menyebalkan untuk tetap memperbarui ini secara manual, tetapi dalam banyak kasus itu sepadan.


Kesimpulan

Saya tidak mengklaim bahwa Anda harus menggunakan obyek konfigurasi untuk setiap fungsi tunggal yang Anda buat mulai sekarang; anggap saja itu sebagai alat lain yang berguna dalam gudang senjata Anda.

Secara pribadi, saya menemukan pola yang sangat berguna setiap kali saya membangun konsep pertama dari beberapa kelas yang semua harus bekerja bersama. Fleksibilitas tambahan dari sebuah conf memberikan saya jauh lebih banyak fleksibilitas, membebaskan saya untuk menangani semua fungsi yang berbeda dan mengubah cara mereka memanggil satu sama lain, tanpa khawatir tentang memecahkan kode dengan memasukkan atau menghapus parameter.

Ingat manfaatnya:

  • Sangat mudah untuk menambah dan menghapus parameter (di kedua ujungnya).
  • Mudah untuk menetapkan nilai default.
  • Anda tidak perlu khawatir tentang urutan parameter.

Ada beberapa kelemahan dalam menggunakan obyek sederhana seperti yang saya miliki - terutama jika Anda melakukannya dalam proyek yang melewati tahap prototyping. Lihat komentar-komentar hebat di bawah ini untuk lebih jelasnya!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.