Kalau kamu baru belajar Flutter, mungkin sering ketemu kode seperti ini:
ElevatedButton(
onPressed: _isLoading ? null : _login,
child: _isLoading
? const CircularProgressIndicator()
: const Text('Login'),
)
Lalu mungkin muncul pertanyaan:
“Kenapa sih kok fungsi login ditulis _login
pakai underscore, bukan cuma login
aja?”
Nah, artikel ini akan membahas dengan detail fungsi underscore di Dart/Flutter dan kenapa banyak developer lebih memilih menulis _login
dibanding login
.
1. Dart Punya Aturan Soal Underscore _
Kalau di bahasa lain (seperti Python atau JavaScript), underscore di depan nama variabel/fungsi sering dipakai hanya sebagai gaya penamaan (convention).
Tapi di Dart, underscore punya arti teknis yang penting:
Underscore di awal nama berarti private (hanya bisa diakses di file/library yang sama).
Artinya, kalau kamu bikin:
void _login() {
print("Ini fungsi private");
}
Maka fungsi _login
tidak bisa dipanggil dari file lain.
Tapi kalau kamu bikin:
void login() {
print("Ini fungsi public");
}
Maka fungsi login
bisa dipanggil dari mana saja selama file tersebut di-import.
2. Kenapa Developer Flutter Sering Pakai _
?
Biasanya, dalam sebuah aplikasi Flutter, banyak fungsi atau variabel yang hanya dipakai di dalam satu widget atau state.
Contoh: tombol login di halaman login.
Apakah fungsi login ini perlu diakses dari luar? Jawabannya: nggak perlu.
Makanya, developer menulisnya begini:
class _LoginPageState extends State<LoginPage> {
bool _isLoading = false;
void _login() {
setState(() {
_isLoading = true;
});
// logika login di sini
}
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: _isLoading ? null : _login,
child: _isLoading
? const CircularProgressIndicator()
: const Text('Login'),
);
}
}
Perhatikan:
-
Variabel
_isLoading
→ hanya dipakai di dalam class ini. -
Fungsi
_login
→ hanya untuk tombol login di halaman ini.
Kalau dibuat public (login
), maka fungsi itu bisa saja dipanggil dari luar file. Padahal, itu tidak ada gunanya.
Maka solusinya → kasih underscore (_login
).
3. Bedanya login
vs _login
Biar lebih jelas, kita lihat contoh nyata:
File auth.dart
void login() {
print("Fungsi login PUBLIC");
}
void _login() {
print("Fungsi login PRIVATE");
}
File main.dart
import 'auth.dart';
void main() {
login(); // Bisa dipanggil
_login(); // ERROR: _login is private and only accessible within 'auth.dart'
}
Dari contoh ini kelihatan jelas perbedaannya:
-
login()
→ bisa dipanggil dari file mana saja (public). -
_login()
→ hanya bisa dipanggil dari file tempat dia didefinisikan (private).
4. Kapan Harus Pakai _
?
Gunakan underscore _
ketika:
-
Variabel/fungsi hanya dipakai di dalam satu file.
-
Kamu tidak ingin orang lain (atau file lain) mengakses langsung variabel/fungsi tersebut.
-
Contoh:
_login
,_isLoading
,_fetchData
,_controller
.
Gunakan tanpa underscore ketika:
-
Variabel/fungsi memang harus bisa diakses dari luar file.
-
Contoh:
loginUser
,ApiService
,UserModel
, dll.
Jadi, alasan kenapa di Flutter (dan Dart) sering pakai _login
ketimbang login
adalah:
-
Underscore berarti private → hanya bisa diakses di file yang sama.
-
Lebih aman → mencegah akses yang tidak sengaja dari luar file.
-
Lebih rapi → kode jadi jelas mana yang internal/private, mana yang public.
Dengan kata lain, kalau fungsi itu hanya dipakai oleh widget tertentu (seperti tombol login), pakailah _login
. Tapi kalau fungsi itu harus dipakai banyak file, barulah gunakan login
tanpa underscore.
Nah, sekarang sudah jelas kan kenapa _login
itu penting?
Kalau kamu baru belajar Flutter, biasakan bedakan fungsi private (pakai _
) dan fungsi public (tanpa _
) supaya kode kamu lebih clean, aman, dan gampang dirawat.
0 Comments:
Post a Comment