Masukkan Password
10 1.9 Getting User Input in Dart Programming Language | Learn Dart Language | Dart Course
Kita lanjutkan ke materi User Input pada Dart. Materi ini penting karena mulai di sini program kita tidak lagi hanya bekerja dengan nilai yang kita tulis sendiri (hardcoded value), tetapi bisa menerima data dari pengguna.
Ada beberapa istilah di caption yang salah transkripsi. Yang dimaksud adalah Dart, dan package yang digunakan adalah dart:io, bukan “dot IO”.
1. Apa Itu User Input?
Sebelumnya kita mungkin membuat program seperti:
void main() {
String name = "Ahad";
print("Name is $name");
}
Nilai "Ahad" sudah kita tentukan langsung di dalam kode.
Ini disebut hardcoded value.
Masalahnya, setiap kali ingin mengganti nama, kita harus mengubah kode:
String name = "Budi";
Kemudian kalau ingin:
Andi
kita harus mengubah kode lagi.
Nah, dengan user input, pengguna sendiri yang memasukkan datanya ketika program berjalan.
Contohnya:
Please enter your name:
Ahad
Name is Ahad
Kemudian kalau program dijalankan lagi:
Please enter your name:
Budi
Name is Budi
Kita tidak perlu mengubah kode programnya.
Jadi:
User input = cara membuat program menerima data dari pengguna.
2. Hardcoded vs User Input
Perhatikan perbedaannya.
Hardcoded
String name = "Ahad";
Program sudah menentukan nilainya.
Program → "Ahad"
User input
Program → meminta input
↓
User → mengetik "Ahad"
↓
Program → menerima "Ahad"
Ini membuat program menjadi lebih dynamic.
3. Package dart:io
Untuk menerima input dari terminal/command line, Dart menyediakan library:
dart:io
Kita perlu melakukan import:
import 'dart:io';
Contoh program lengkap:
import 'dart:io';
void main() {
print("Please enter your name:");
var name = stdin.readLineSync();
print("Name is $name");
}
Perhatikan dua bagian penting:
import 'dart:io';
dan:
stdin.readLineSync();
4. Apa Itu import?
import digunakan untuk mengambil library/package yang dibutuhkan oleh program.
Kita menulis:
import 'dart:io';
Artinya kurang lebih:
“Dart, saya ingin menggunakan fitur-fitur dari library
dart:io.”
Tanpa import tersebut, kita tidak bisa menggunakan stdin untuk membaca input terminal.
5. Apa Itu stdin?
Ini juga penting.
stdin
adalah singkatan dari:
standard input
Secara sederhana, stdin adalah jalur tempat program menerima input.
Misalnya pengguna mengetik:
Ahad
maka input tersebut masuk melalui stdin.
Gambaran sederhananya:
Keyboard
↓
User mengetik
↓
stdin
↓
Program Dart
6. Apa Itu readLineSync()?
Bagian:
stdin.readLineSync()
digunakan untuk:
membaca satu baris input dari pengguna.
Contohnya:
var name = stdin.readLineSync();
Program akan menunggu pengguna mengetik sesuatu.
Misalnya pengguna mengetik:
Ahad
lalu menekan Enter.
Maka nilai yang dibaca adalah:
"Ahad"
7. Kenapa Disebut Sync?
Kata:
Sync
berasal dari synchronous.
Untuk tahap belajar sekarang, pahami sederhananya seperti ini:
Program akan menunggu input pengguna sebelum melanjutkan ke baris berikutnya.
Misalnya:
print("Masukkan nama:");
var name = stdin.readLineSync();
print("Halo $name");
Urutannya:
1. Print "Masukkan nama:"
↓
2. Program menunggu input
↓
3. User mengetik nama
↓
4. User tekan Enter
↓
5. Program lanjut
↓
6. Print "Halo ..."
Jadi program tidak langsung melompat ke print berikutnya.
8. Contoh Program Pertama
Kita buat program sederhana:
import 'dart:io';
void main() {
print("Please enter your name:");
var name = stdin.readLineSync();
print("Name is $name");
}
Ketika dijalankan:
Please enter your name:
Program berhenti sementara dan menunggu.
Kita ketik:
Ahad
Kemudian:
Name is Ahad
9. Kenapa Input Disimpan ke Variabel?
Perhatikan:
var name = stdin.readLineSync();
Input dari pengguna perlu kita simpan supaya bisa digunakan kembali.
Misalnya:
var name = stdin.readLineSync();
print("Hello $name");
print("Welcome $name");
print("Your name is $name");
Kalau user memasukkan:
Ahad
hasilnya:
Hello Ahad
Welcome Ahad
Your name is Ahad
Jadi variabel berfungsi seperti tempat penyimpanan input.
10. Hal yang Sangat Penting: readLineSync() Menghasilkan String?
Nah, bagian ini adalah salah satu konsep paling penting dari materi ini.
Caption mengatakan bahwa:
stdin.readLineSync()
menghasilkan String.
Secara lebih tepat dalam Dart modern dengan null safety, hasilnya adalah:
String?
Tanda ? berarti nilai tersebut boleh null.
Jadi secara konsep:
stdin.readLineSync()
bisa menghasilkan:
String
atau:
null
11. Apa Arti String?
Misalnya:
String? name;
Tanda:
?
berarti name boleh berisi null.
Jadi:
String name;
berarti:
nameharus berisi String yang tidak null.
Sedangkan:
String? name;
berarti:
nameboleh berisi String ataunull.
Contohnya:
String? name = "Ahad";
boleh.
Dan:
String? name = null;
juga boleh.
12. Kenapa var Dipakai di Contoh?
Kita sering melihat:
var name = stdin.readLineSync();
Dart akan mengetahui tipe hasilnya.
Secara konsep, name akan bertipe:
String?
Karena readLineSync() mengembalikan String?.
Jadi sebenarnya:
var name = stdin.readLineSync();
kurang lebih berarti:
String? name = stdin.readLineSync();
untuk tipe hasil yang diinferensikan Dart.
13. Kenapa Tidak Langsung String?
Misalnya kita menulis:
String name = stdin.readLineSync();
Dart akan memberikan error karena:
stdin.readLineSync()
bertipe:
String?
sedangkan variabel kita meminta:
String
Masalahnya:
String? → bisa null
String → tidak boleh null
Dart tidak mau membiarkan nilai yang mungkin null masuk ke variabel yang tidak boleh null.
Ini adalah bagian dari null safety Dart.
14. Apa Itu ! Setelah readLineSync()?
Di caption dijelaskan tentang null check menggunakan tanda:
!
Misalnya:
String name = stdin.readLineSync()!;
Tanda ! di sini disebut null assertion operator.
Artinya kita mengatakan kepada Dart:
“Saya yakin nilai ini tidak
null.”
Contoh:
var name = stdin.readLineSync()!;
Dengan !, kita memberi tahu Dart bahwa hasilnya dianggap tidak null.
15. Tapi Hati-Hati dengan !
Ini penting.
Tanda ! tidak membuat nilai yang null tiba-tiba menjadi tidak null.
Kita hanya mengatakan kepada Dart:
“Percayalah, saya yakin ini tidak null.”
Kalau ternyata nilai tersebut benar-benar null, program bisa mengalami error saat runtime.
Jadi untuk pemula:
!
jangan dipahami sebagai:
“ubah null menjadi bukan null.”
Tetapi:
“Saya menjamin nilai ini tidak null.”
16. Sekarang Kita Masuk ke Input Angka
Nah, ini bagian penting berikutnya.
Misalnya kita ingin membuat program:
Enter first number:
10
Enter second number:
20
The result is 30
Kita mungkin tergoda menulis:
var first = stdin.readLineSync();
var second = stdin.readLineSync();
print(first + second);
Tetapi ini bukan cara yang benar untuk melakukan penjumlahan angka.
Kenapa?
Karena input dari:
stdin.readLineSync()
adalah String?.
17. Input dari Keyboard Pada Dasarnya Teks
Misalnya kita mengetik:
10
Manusia melihatnya sebagai angka.
Tetapi input terminal dibaca sebagai:
"10"
yaitu String.
Begitu juga:
20
dibaca sebagai:
"20"
Bukan:
20
sebagai int.
Ini perbedaan yang sangat penting.
18. String "10" vs Integer 10
Perhatikan:
"10"
adalah String.
Sedangkan:
10
adalah int.
Kelihatannya hampir sama, tetapi tipenya berbeda.
"10" → String
10 → int
Kalau kita ingin melakukan:
10 + 20 = 30
kita harus memiliki:
int + int
bukan:
String + String
19. Mengubah String Menjadi int
Kita sudah belajar konversi pada materi sebelumnya.
Untuk mengubah String menjadi integer, kita menggunakan:
int.parse()
Misalnya:
String value = "10";
int number = int.parse(value);
Sekarang:
value → "10" → String
number → 10 → int
20. Program Input Dua Angka
Sekarang kita buat program lengkap.
import 'dart:io';
void main() {
print("Enter first number:");
var first = stdin.readLineSync();
print("Enter second number:");
var second = stdin.readLineSync();
int firstNumber = int.parse(first!);
int secondNumber = int.parse(second!);
int result = firstNumber + secondNumber;
print("The result is $result");
}
Jika dijalankan:
Enter first number:
10
Enter second number:
20
The result is 30
21. Mari Kita Bedah Baris Demi Baris
Baris 1
import 'dart:io';
Mengaktifkan library dart:io agar kita bisa menggunakan stdin.
Baris 2
void main() {
Ini adalah titik awal program Dart.
Baris 3
print("Enter first number:");
Memberi instruksi kepada user:
Enter first number:
Baris 4
var first = stdin.readLineSync();
Program menunggu user memasukkan angka.
Misalnya:
10
Maka:
first = "10"
Ingat, masih berupa String?.
Baris berikutnya
print("Enter second number:");
Program meminta angka kedua.
Kemudian:
var second = stdin.readLineSync();
Misalnya user memasukkan:
20
Maka:
second = "20"
Masih String.
22. Mengubah Input Pertama Menjadi int
Kita menulis:
int firstNumber = int.parse(first!);
Ada beberapa proses di sini.
Awalnya:
first
↓
"10"
↓
first!
↓
"10"
↓
int.parse()
↓
10
Akhirnya:
firstNumber = 10
23. Mengubah Input Kedua
Begitu juga:
int secondNumber = int.parse(second!);
Awalnya:
"20"
Kemudian:
int.parse("20")
menghasilkan:
20
Jadi:
secondNumber = 20
24. Melakukan Penjumlahan
Sekarang kita sudah memiliki:
firstNumber = 10;
secondNumber = 20;
Keduanya bertipe int.
Maka:
int result = firstNumber + secondNumber;
menjadi:
10 + 20
Hasil:
30
25. Menampilkan Hasil dengan String Interpolation
Kemudian:
print("The result is $result");
Kalau:
result = 30
maka output:
The result is 30
Kita sudah belajar ini sebelumnya sebagai string interpolation.
$result
digunakan untuk memasukkan nilai variabel ke dalam String.
26. Alur Program Secara Keseluruhan
Program tadi sebenarnya melakukan proses seperti ini:
USER
↓
ketik "10"
↓
stdin.readLineSync()
↓
"10" (String?)
↓
int.parse()
↓
10 (int)
Kemudian:
USER
↓
ketik "20"
↓
stdin.readLineSync()
↓
"20" (String?)
↓
int.parse()
↓
20 (int)
Kemudian:
10 + 20
↓
30
Kemudian:
30
↓
print()
↓
The result is 30
27. Kenapa Harus Melakukan Konversi?
Ini pertanyaan penting.
Karena komputer membedakan:
"10"
dan:
10
Yang pertama:
String
Yang kedua:
int
Kalau tujuan kita melakukan operasi matematika, kita membutuhkan tipe angka.
Contohnya:
int a = 10;
int b = 20;
print(a + b);
Hasil:
30
Sedangkan input user:
var a = stdin.readLineSync();
menghasilkan teks.
Jadi:
Input user
↓
String?
↓
konversi
↓
int
↓
operasi matematika
28. Bagaimana Kalau User Memasukkan Huruf?
Misalnya program meminta:
Enter first number:
Tetapi user mengetik:
hello
Kemudian kita melakukan:
int.parse("hello");
Dart tidak bisa mengubah "hello" menjadi integer.
Ini dapat menghasilkan:
FormatException
Karena "hello" bukan representasi angka integer yang valid.
Contoh lain:
"10" → bisa menjadi 10
"500" → bisa menjadi 500
"-20" → bisa menjadi -20
"hello" → tidak bisa menjadi int
29. Alternatif yang Lebih Aman: int.tryParse()
Untuk program yang lebih aman, kita juga bisa menggunakan:
int.tryParse()
Perbedaannya:
int.parse()
akan menghasilkan error jika input tidak valid.
Sedangkan:
int.tryParse()
akan menghasilkan null jika tidak bisa dikonversi.
Contoh:
var number = int.tryParse("hello");
print(number);
Hasil:
null
Sedangkan:
var number = int.tryParse("10");
print(number);
hasilnya:
10
Untuk materi dasar, pahami dulu int.parse(). Nanti ketika belajar validasi input, tryParse() akan sangat berguna.
30. Bisa Juga Input double
Tidak hanya int.
Misalnya user ingin memasukkan harga:
12500.50
Kita bisa menggunakan:
double.parse()
Contoh:
import 'dart:io';
void main() {
print("Enter price:");
var input = stdin.readLineSync();
double price = double.parse(input!);
print("Price is $price");
}
Jika user memasukkan:
12500.50
maka:
input → "12500.50"
double.parse → 12500.50
31. Input String Tidak Perlu parse
Kalau kita meminta nama:
Enter your name:
Ahad
kita tidak perlu melakukan:
int.parse()
karena nama memang berupa String.
Cukup:
var name = stdin.readLineSync();
Kemudian:
print("Hello $name");
32. Jenis Input dan Konversinya
| Input yang diinginkan | Method |
|---|---|
String | stdin.readLineSync() |
int | int.parse(...) |
double | double.parse(...) |
int yang aman dari input invalid | int.tryParse(...) |
double yang aman dari input invalid | double.tryParse(...) |
Contoh:
var name = stdin.readLineSync();
var age = int.parse(stdin.readLineSync()!);
var height = double.parse(stdin.readLineSync()!);
33. Contoh Program yang Lebih Rapi
Daripada membuat banyak variabel String sementara:
var first = stdin.readLineSync();
int firstNumber = int.parse(first!);
kita bisa langsung:
int firstNumber = int.parse(stdin.readLineSync()!);
Contoh lengkap:
import 'dart:io';
void main() {
print("Enter first number:");
int firstNumber = int.parse(stdin.readLineSync()!);
print("Enter second number:");
int secondNumber = int.parse(stdin.readLineSync()!);
int result = firstNumber + secondNumber;
print("The result is $result");
}
Output:
Enter first number:
10
Enter second number:
20
The result is 30
34. Kenapa Program Harus Dijalankan dari Command Line?
Materi video mengatakan program perlu dijalankan melalui command line/terminal.
Hal ini karena:
stdin.readLineSync()
membaca input dari standard input, biasanya terminal.
Contohnya kamu menjalankan program Dart dari terminal, lalu program menampilkan:
Enter your name:
Kemudian kamu mengetik:
Ahad
dan tekan Enter.
Jadi terminal berfungsi sebagai tempat:
- menjalankan program
- melihat output
- memasukkan input
35. Hubungan dengan Materi Sebelumnya
Sekarang beberapa materi yang sudah kita pelajari mulai saling terhubung.
Misalnya:
Variable
int age = 25;
digunakan untuk menyimpan data.
User input
stdin.readLineSync()
digunakan untuk mendapatkan data dari user.
Conversion
int.parse()
digunakan untuk mengubah String menjadi angka.
Arithmetic operator
+
digunakan untuk menghitung.
String interpolation
$result
digunakan untuk menampilkan hasil.
Semuanya bisa digabungkan menjadi satu program.
36. Gambaran Besar
Misalnya kita membuat kalkulator sederhana:
User memasukkan angka
↓
stdin.readLineSync()
↓
String
↓
int.parse()
↓
int
↓
operator +
↓
hasil
↓
print()
Contohnya:
10 + 20
↓
30
Ini sudah mulai terasa seperti program sungguhan.
37. Kesalahan yang Sering Dilakukan Pemula
❌ 1. Lupa import
Kalau menggunakan:
stdin.readLineSync()
tetapi lupa:
import 'dart:io';
maka stdin tidak akan dikenali.
❌ 2. Menganggap input angka langsung menjadi int
Misalnya:
var number = stdin.readLineSync();
Jika user mengetik:
10
jangan berpikir number otomatis menjadi:
int
Input tersebut dibaca sebagai:
String?
Untuk menjadi integer:
int number = int.parse(stdin.readLineSync()!);
❌ 3. Lupa parse
Misalnya ingin menghitung dua input:
var a = stdin.readLineSync();
var b = stdin.readLineSync();
Jangan langsung menganggap:
a + b
sebagai penjumlahan integer.
Kita harus mengubah input menjadi angka terlebih dahulu.
❌ 4. Salah memahami !
Pada:
stdin.readLineSync()!
! bukan berarti:
“konversi String menjadi String non-null.”
Tetapi:
“Saya memberi tahu Dart bahwa hasil ini tidak null.”
Konversi String ke int tetap dilakukan oleh:
int.parse()
Jadi:
int.parse(stdin.readLineSync()!)
memiliki dua proses:
! → menangani kemungkinan null
int.parse → mengubah String menjadi int
38. Cara Mengingat stdin.readLineSync()
Kalau melihat:
stdin.readLineSync()
ingat kalimat:
“Ambil satu baris input dari user.”
Kalau melihat:
int.parse(...)
ingat:
“Ubah teks menjadi integer.”
Kalau melihat:
double.parse(...)
ingat:
“Ubah teks menjadi double.”
39. Cheat Sheet
Import
import 'dart:io';
Input String
var name = stdin.readLineSync();
Input Integer
int age = int.parse(stdin.readLineSync()!);
Input Double
double price = double.parse(stdin.readLineSync()!);
Output
print(name);
atau:
print("Hello $name");
40. Contoh Latihan
Coba perhatikan program berikut:
import 'dart:io';
void main() {
print("Enter your name:");
String name = stdin.readLineSync()!;
print("Enter your age:");
int age = int.parse(stdin.readLineSync()!);
print("Hello $name");
print("You are $age years old");
}
Jika user memasukkan:
Enter your name:
Ahad
Enter your age:
25
hasilnya:
Hello Ahad
You are 25 years old
Perhatikan alurnya:
"Ahad"
↓
String
sedangkan:
"25"
↓
int.parse()
↓
25
41. Latihan Berikutnya
Coba kamu tebak output dan tipe datanya.
Soal 1
var name = stdin.readLineSync();
User memasukkan:
Budi
Apa isi name?
"Budi"dan secara null-safety tipenya adalahString?.
Soal 2
int age = int.parse(stdin.readLineSync()!);
User memasukkan:
20
Apa isi age?
20, dengan tipeint.
Soal 3
int a = int.parse(stdin.readLineSync()!);
int b = int.parse(stdin.readLineSync()!);
print(a + b);
User memasukkan:
15
25
Output:
40
42. Kesimpulan
Materi ini memperkenalkan konsep yang sangat penting: program dapat menerima data dari pengguna.
Inti alurnya:
USER
↓
mengetik input
↓
stdin.readLineSync()
↓
String?
↓
jika perlu dikonversi
↓
int.parse() / double.parse()
↓
data siap digunakan
Yang paling penting untuk diingat:
import 'dart:io';
→ mengimpor library untuk fitur I/O.
stdin.readLineSync()
→ membaca satu baris input dari terminal dan hasilnya bertipe String?.
int.parse(...)
→ mengubah String menjadi int.
double.parse(...)
→ mengubah String menjadi double.
!
→ memberi tahu Dart bahwa kita yakin nilai yang mungkin null tersebut tidak null.
Jadi kalau kamu melihat:
int number = int.parse(stdin.readLineSync()!);
bacalah dalam kepala seperti ini:
“Minta input dari user → ambil teksnya → pastikan tidak null → ubah teks tersebut menjadi integer → simpan ke variabel
number.”
Ini adalah pola yang akan sangat sering kamu temui ketika membuat program Dart berbasis terminal.