.NET Aplikasi Opsi

Soeleman 3 September 2017

.NET Aplikasi Opsi

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 >

alt text

< C# >

alt text

< VB.NET >

alt text

< C# >

alt text

< VB.NET >

alt text

< C# >

alt text

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 >

alt text

< C# >

alt text

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 >

alt text

< C# >

alt text

Kalau kita menjalankan tanpa ada arguments sama sekali.
Maka kita akan mendapatkan GetUsage dari semua property yang ada.

alt text

Dan dengan tambahan option Debug kita bisa melihat hasil-nya di Windows-Output pada Visual-Studio. Dikoding.exe -k 99 -d.

alt text

Dengan Dikoding.exe -k 99 -v, maka kita akan mendapakan hasil seperti di gambar.

alt text

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# >

alt text

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 >

alt text

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 >

alt text

Form

Implemantasi pengunaan CommandLine di-GUI tidak banyak berbeda. Lebih banyak mengadaptasi terhadap control dari pada ke standard-output.

< VB.NET >

alt text

< C# >

alt text

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.

alt text

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.

alt text

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.

alt text

Dan hasil-nya akan seperti gambar di bawah.

alt text

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.