Belajar Pemrograman Dart: Input/Output di Dart

{tocify} $title={Daftar Isi}

Pendahuluan:

Suatu program/aplikasi akan membutuhkan sebuah nilai untuk dapat menjalankan sebuah proses tertentu dimana nilai tersebut dapat dihasilkan dari nilai konstan yang telah didefinisikan di dalam kode program ataupun dari proses masukan (input) dari pengguna (user) dan memberikan hasilnya sebagai proses keluaran (output), saat ini pada sebuah program/aplikasi sangatlah umum memiliki fungsi input/output untuk memproses ataupun menyimpan suatu data sehingga dapat membuat aplikasi bergerak dinamis.

Fungsi input/output didalam bahasa pemrograman Dart telah disediakan oleh bahasa pemrograman Dart itu sendiri atau dikenal sebagai built-in function atau fungsi bawaan yang disimpan didalam sebuah library yang dikenal sebagai dart:io yang berisi class, fungsi/method ataupun objek yang dikhususkan untuk menangani proses input/output, meliputi:
  • Baca tulis file serta membuat dan mengakses direktori/folder
  • Baca tulis data dari jaringan web server seperti HTTP dan Websocket
  • Membaca input dari keyboard
  • Menampilkan output ke console
  • Menulis pesan error ke console
  • Membaca informasi mesin
  • dsb
Adapun jenis aplikasi yang dapat menggunakan library dart:io adalah sebagai berikut:
  • Server
  • Command-Line
  • Fluttter mobile apps, dan
  • Flutter desktop apps
Oleh karenanya program/aplikasi anda mungkin akan membutuhkan library dart:io untuk dapat melakukan tugas-tugas tersebut.

Pengenalan dart:io

Library (pustaka) dart:io merupakan library pada bahasa pemrograman Dart yang menyimpan berbagai objek ataupun fungsi yang berkaitan dengan operasi input/output sehingga membuat program dapat menerima masukan (input) yang diberikan oleh pengguna (user) ataupun proses yang dijalankan oleh mesin komputer itu sendiri seperti baca tulis file, direktori ataupun file dan proses sistem yang berjalan di latar belakang. Adapun beberapa class, fungsi dan properti yang tersimpan didalam library dart:io diantaranya sebagai berikut:

Class / Method / Property Jenis Keterangan
close() Method Digunakan untuk menutup suatu proses
exists() Method Digunakan untuk memeriksa keberadaan file/direktori/link
existsSync() Method Digunakan untuk memeriksa keberadaan file/direktori/link secara sinkronus
openRead() Method Digunakan untuk membuat Stream independen untuk membaca suatu file
openWrite() Method Digunakan untuk membuat IOSink independen yang dapat membuka dan menulis String ke dalam file
readAsStringSync() Method Digunakan untuk membaca isi suatu file sebagai String dengan memberikan encoding pada file dan dilakukansecara sinkronus
readLineSync() Method Digunakan membaca masukan yang diterima oleh stdin secara sinkronus
run() Method Digunakan untuk menjalankan sebuah proses, proses yang dijalankan merupakan proses executable dengan spesifik argumen
runSync() Method Digunakan untuk menjalankan sebuah proses secara sinkronus
writeAsString() Method Digunakan untuk menulis String ke dalam sebuah file
write() Method Digunakan untuk menulis string
writeln() Method Digunakan untuk menulis string yang dimulai dengan menambah baris baru
File() Class Digunakan untuk memanipulasi file dan isi kontennya
Directory() Class Digunakan untuk mengakses, membuat, memanipulasi atau menghapus suatu direktori
Platform() Class Digunakan untuk membaca/menerima informasi sistem seperti sistem operasi, nama host, dll
exitCode Properti Digunakan untuk keluar dari kode program
stdin Properti Digunakan untuk menerima masukan melalui layar console / cli dan kemudian dibaca oleh method readLineSync()
stdout Properti Digunakan untuk memberikan ouput ke layar console / cli dan output kemudian ditulis oleh method write() / writeln()

Dikarenakan ada banyak fungsi, class ataupun properti yang tersimpan di library dart:io maka tidak semua bisa penulis jabarkan, kalian dapat merujuk ke halaman dokumentasi resminya yang telah penulis sematkan di referensi pada akhir halaman ini untuk mempelajari lebih banyak mengenai library dart:io.

Penggunaan

Anda perlu mengimport library dart:io untuk dapat menggunakan class, fungsi dan properti yang tersimpan di library tersebut, contohnya sebagai berikut:

Membaca masukan berupa string via console/cli:

import 'dart:io';

void main() {
  stdout.write('Nama anda: ');
  String nama = stdin.readLineSync()!;
  stdout.write('Nama anda adalah: $nama');
}

Agar program dapat menerima nilai masukan yang diberikan oleh pengguna maka anda perlu menggunakan properti stdin (Standard Input) yang akan menerima/membaca nilai masukan dengan menggunakan method readlinesync untuk membaca setiap karakter masukan dalam bentuk string, untuk outputnya anda dapat menggunakan properti stdout (Standard Output) diikuti dengan method write() untuk menulis output ke layar console tanpa memindahkan kursor ke baris baru atau gunakan stdout.writeln() atau print() sehingga output ditulis setelah pointer dipindahkan ke baris baru.

Pada dasarnya ketika suatu proses i/o berjalan mungkin saja pengguna memproses null baik secara sengaja ataupun tidak, artinya pengguna tidak memasukan nilai apapun sedangkan bahasa pemrograman Dart telah menerapkan null-safety maka dari contoh di atas anda perlu menggunakan operator null-aware (!) sebelum di akhiri oleh semicolon pada method readlinesync yang dimaksudkan untuk memastikan bahwa variable dapat memiliki nilai ketika program dijalankan namun akan menghasilkan error saat tidak ada nilai apapun yang diterima, anda perlu ingat kembali bahwa variable di Dart secara default bersifat non-nullable artinya tidak boleh untuk tidak memiliki nilai sedangkan untuk merubah variable menjadi nullable anda perlu menggunakan operator (?), contohnya sebagai berikut:

import 'dart:io';

void main() {
  stdout.write('Nama anda: ');
  String? nama = stdin.readLineSync()!;
  stdout.write('Nama anda adalah: $nama');
}

Ketika program dijalankan dan anda tidak memberi nilai apapun alias null maka program juga menghasilkan null karena compiler menganggap anda memberikan izin variable nama menjadi nullable sedangkan sebelumnya pada variable nama akan menghasilkan error karena compiler menganggap anda tidak mengizinkan variable menjadi nullable sehingga variable wajib menerima input saat dijalankan.

Jika anda ingin menginput angka maka anda perlu menggunakan method parse ataupun tryparse, contohnya sebagai berikut:

import 'dart:io';

void main() {
  //non-nullable variable
  stdout.write('Masukan angka: ');
  int angka = int.parse(stdin.readLineSync()!);
  stdout.write('Masukan angka: ');
  //nullable variable
  int? nilai = int.tryParse(stdin.readLineSync()!);
  stdout.write('Angka anda adalah: $angka\nNilai anda adalah: $nilai');
}

Method parse dan tryparse digunakan untuk membaca nilai integer yang dimasukan perbedaanya, tryparse merupakan method yang berjalan dengan fitur null-safety sehingga ketika program dijalankan dan tidak menerima input apapun dan/atau justru menerima input berupa string maka akan menghasilkan null sementara pada method parse anda wajib memberi nilai saat program berjalan dan tidak boleh memasukan selain angka (string, huruf, karakter).

Membaca isi sebuah file:

import 'dart:io';
 
void main() {
  //membaca file yang satu direktori dengan file latihan.dart
  var konten = File('file.txt').readAsStringSync();
  //membaca file yang berbeda direktori dengan file latihan.dart
  var kontens = File('E:/file.txt').readAsStringSync();
  print('File Contents\n---------------');
  print("Satu direktori:\n$konten\n==============\nLain direktori:\n$kontens");
}

Untuk membaca isi file anda perlu menggunakan class File() dengan memberikan argumen berupa string yang menunjuk lokasi file kemudian anda perlu menambahkan method .readAsStringSync() yang akan membaca file tersebut sebagai string. 

Hanya file yang di encoding dengan serial utf-8 yang dapat dibaca oleh kompiler karena secara default dart menggunakan encoding dengan serial utf-8 sehingga jika anda mendapati pesan error Failed to decode data using encoding 'utf-8' maka file yang dicoba untuk dibaca menggunakan encoding selain utf-8, dalam hal ini anda perlu membuat handler yang dapat melakukan decoding selain dengan utf-8 dengan melakukan konversi jenis serial yang digunakan namun fungsi-fungsi tersebut disimpan didalam library dart:convert.

Membaca direktori:

import 'dart:io';
 
void main() async{
  //membaca direktori Program Files
  var dir = Directory('C:/Program Files');
  //memeriksa direktori
  if(await dir.exists()){
    print("Direktori ditemukan: \n$dir");
  } else {
    print("Direktori tidak ditemukan");
  }
}

Untuk membaca sebuah direktori maka anda perlu menggunakan class Directory() dengan diikuti argumen/parameter didalamnya yang menunjuk pada lokasi direktori, selain itu anda juga perlu menggunakan fungsi async karena proses tersebut hanya dapat dijalankan secara asynchronous

Menulis ke file:

import 'dart:io';
void main() async {
  final filename = 'file.txt';
  var file = await File(filename).writeAsString('HelloWorld');
  // Do something with the file.
}

Untuk dapat menulis data ke sebuah file anda bisa menggunakan method writeAsString yang mana berdasarkan alur kerjanya method tersebut akan membuka, menulis, melakukan encoding pada file dan menutup file ketika string telah ditulis ke dalam file. Secara default method writeAsString juga akan membuat file jika file tersebut belum ada dan jika file sudah ada maka semua isi string yang ada di dalam file akan diganti dengan string baru.

Penutup:

Library dart:io digunakan untuk hal-hal yang berkaitan dengan aktivitas input/output baik proses input via console, baca tulis file, direktori, http dan web server, ataupun file dan proses sistem, beberapa fungsi diatas adalah sebagian dari fungsi-fungsi yang tersimpan di library dart:io sehingga jika anda membutuhkan panduan dan dokumentasi lengkap, anda dapat mengunjungi halaman dokumentasi resminya pada bagian referensi yang telah penulis sematkan di akhir halaman ini.

Referensi:
Dart.dev - dart:io library - diakses pada 15 Mei, 2022
Bayu Radityo

Seorang lulusan teknik informatika yang senang dalam berbagi ilmu pengetahuan, dan membuat karya digital berupa photomanipulation dan digital drawing. instagram external-link

Posting Komentar

Lebih baru Lebih lama