.NET Aplikasi Opsi
Soeleman 3 September 2017
Membuat aplikasi kita memiliki fitur-fitur yang bisa 'atur' dengan menambahkan 'perintah' pada saat menjalankannya tentu menarik. Bagi yang biasa menggunakan Command-Line Interface(CLI), aplikasi-nya sungguh memanfaatkan sekali command argument/options ini.
Bagaimana kita bisa membuat seperti itu?. Cukup mudah prinsipnya, kita tinggal mem-process character yang di pass oleh shell ke aplikasi. Sayang-nya process ini cukup memakan waktu untuk membuatnya dan boleh dibilang berulang-ulang melakukannya per-aplikasi. Kita bisa saja membuat fungsi-fungsi umum untuk membantu kita menyederhanakan tugas ini. Ternyata ada banyak library untuk ini, salah satunya CommandLine.
CommandLineParser
CommandLine akan membantu aplikasi kita mengelola command-line arguments dan fungsi yang berhubugan. Ia akan memudahkan kita untuk membuat defining switches, options/flag, verb commands dan lainnya dengan rapi dan jauh lebih mudah.
Cukup lama juga CommandLine telah hadir dalam lingkungan .Net, API-nya stabil sejak 2005. License-nya pun cukup bebas, The MIT License (MIT).
Dan untuk menggunakannya cukup menggunakan NuGet, cari package CommandLineParser. Untuk source-code-nya bisa di dapat pada GitHub.
Verb Commands
Salah satu yang ada dalam API-nya adalah fitur Verb Commands. Contoh-nya seperti git commit -a. Sedangkan git -a, akan error karena tidak mengenal -a dalam command/option.
Per-Verb Commands-nya juga dapat memiliki options. Seperti -a, kalau verb commit dengan push dapat memiliki -a sendiri-sendiri. Boleh di bilang Verb Commands itu Sub/Group command/option.
Coba
Sebelum kita melihat menggunakan CommandLine ini. Kita memerlukan beberapa class agar demo-nya lebih mudah.
Dalam demo ini kita akan membuat arguments dapat memilih log class. Karena itu kita akan buat class ILog, DebugLog dan NullLog.
< VB.NET >
< C# >
< VB.NET >
< C# >
< VB.NET >
< C# >
Options
CommandLine akan menggunakan class yang memiliki attribute tertentu. Dengan attribute tersebut, mapping antara arguments dan options yang di butuhkan dapat di lakukan.
Di sini kita membuat beberapa property yang kita butuhkan untuk demo ini.
-
Key
Di sini ada attribute Required. Attribute ini akan memaksa agar aplikasi harus mendapakan argument ini. Contoh: kalau hanya Dikoding.exe saja, maka CommandLine akan memberitahukan bahwa parse-argument gagal. Namun apabila di berikan seperti ini Dikoding.exe -k 007, maka CommandLine Required sudah terpenuhi.
-
Counter
Dengan property ini kita bisa menerima input dari arguments yang akan di gunakan oleh aplikasi kita. Dan di sini kita juga memberikan attribute DefaultValue dengan value 10. Dengan begitu, ketika parse-nya gagal. Property ini bernilai 10. *Debug
Untuk property yang ber-type Boolean secara default adalah false. Jadi kalau attribute DefaultValue-nya di isi True, maka ia akan selalu True baik ada argument atau tidak. Contoh: Dikoding.exe -d, maka bila DefaultValue-nya True, maka property ini akan True. Kalau DefaultValue-nya False, maka property ini akan True.
-
Verbose
Ini hampir sama dengan Debug-Property, hanya dia akan memberikan level tambahan dalam demo ini.
-
LastParseState
Di perlukan oleh CommandLine untuk menaruh State apabila parse-arguments-nya tidak berhasil. Ia akan membantu menghasilkan Error informasi tentang property yang gagal di-parse.
< VB.NET >
< C# >
Command-Line Interface (CLI)
Demo ini cukup sederhana saja. Property-Key untuk menunjukkan tentang attribute-required yang ada di CommandLine. Dan property-debug dan property-verbose boleh di bilang variasi dari multi-level-log.
< VB.NET >
< C# >
Kalau kita menjalankan tanpa ada arguments sama sekali.
Maka kita akan mendapatkan GetUsage dari semua property yang ada.
Dan dengan tambahan option Debug kita bisa melihat hasil-nya di Windows-Output pada Visual-Studio. Dikoding.exe -k 99 -d.
Dengan Dikoding.exe -k 99 -v, maka kita akan mendapakan hasil seperti di gambar.
Graphical User Interface (GUI)
Pada dasarnya penggunaan di GUI tidak banyak berbeda. Ada beberapa bagian code di taruh sesuai dengan tata-cara yang berlaku. Baik itu WinForm, WPF atau Desktop-Framework lainnya.
CSharp
Pada C# agak mirip dengan CLI versi. Cukup modifikasi Class Program seperti di bawah.
< C# >
VB.Net
Untuk VB.NET, agak sedikit berbeda. Karena VB.NET memiliki semacam Framework untuk mengatur bagaimana aplikasi di mulai. Oleh karena itu kita mengikuti tata-cara yang berlaku.
< VB.NET >
Kita buka Project-Property dan kita ke Tab-Application. Disana kita click tombol View Application Events. Hasil click tadi kita akan mendapatkan file ApplicationEvents.vb. Dalam file itu ada Partial Class MyApplication dalam namespace My. Dan kita akan memanfaatkan event Startup sebagai pengganti Class Program yang ada di C#.
< VB.NET >
Form
Implemantasi pengunaan CommandLine di-GUI tidak banyak berbeda. Lebih banyak mengadaptasi terhadap control dari pada ke standard-output.
< VB.NET >
< C# >
Required Error
Pada saat menjalankan aplikasi ini, kita akan mendapatkan Error dalam bentuk MessageBox. Ini seperti yang kita harapkan, karena ada property yang memiliki attribute-required.
Kalau kita menjalan aplikasi kita dengan Visual-Studio dan aplikasi kita mengharuskan adanya arguments tertentu. Kita bisa ke Tab-Debug dan masukkan arguments itu di Command line arguments. Dalam test kita ini, di masukkan -k 88. Property lainnya bisa di tambahkan di sini, seperti layaknya di console aplikasi.
Run
Dengan arguments Dikoding.exe -k 88 -v, kita akan melihat pada Visual-Studio Windows-Output. Akan tertulis pada Standard-Output, ini hasil kita meng-True-kan property-Verbose.
Dan hasil-nya akan seperti gambar di bawah.
Penutup
Dengan CommandLine, kita dapat membuat aplikasi kita memiliki options yang dengan mudah kita tambahkan dan maintenance-nya. Terlebih lagi bila kita memiliki options yang rumit.
Apalagi target aplikasinya menggunakan CLI. Walaupun begitu kita tetap juga menerapkan ini pada GUI, terlebih lagi ada fitur khusus atau tersembunyi untuk aplikasi itu.
Referensi
Perhatian! Code yang ditampilkan dalam tulisan ini merupakan ilustrasi dari yang ingin dipaparkan dan bukan production ready code. Sudah banyak kejadian karena asal meng-copy-and-paste tanpa mengerti code yang diambil itu ke dalam production. Selain itu perlu ada tambahan code dan test sebelum siap untuk digunakan secara utuh.