Exception adalah kejadian yang tidak diinginkan yang dapat mengganggu alur normal program. Exception handling memungkinkan kita menangani error dengan cara yang elegan.
Struktur Dasar Try-Catch
voidmain() {try {// Kode yang mungkin menghasilkan exceptionint result =12~/0; // Pembagian dengan nolprint(result); } catch (e) {print('Terjadi error: $e'); }}
Menangkap Multiple Exception
voidmain() {try {// Kode yang mungkin menghasilkan exceptionString? input =null;print(input!.length); // Null pointer exception } onFormatException {print('Format tidak valid!'); } onNoSuchMethodError {print('Method tidak ditemukan!'); } catch (e) {print('Error lain: $e'); }}
Stack Trace dalam Exception
voidmain() {try {List<int> numbers = [1, 2, 3];print(numbers[10]); // Index out of range } catch (e, stackTrace) {print('Error: $e');print('Stack trace: $stackTrace'); }}
7.2 Finally
Penggunaan Finally
Finally block akan selalu dijalankan, baik terjadi exception atau tidak.
voidmain() {var file;try {// Simulasi membuka file file =openFile();// Proses fileprocessFile(file); } catch (e) {print('Error saat memproses file: $e'); } finally {// Selalu tutup file, terlepas dari berhasil atau errorif (file !=null) { file.close(); }print('Pembersihan resources selesai'); }}
Contoh Penggunaan Praktis
classDatabaseConnection {bool isConnected =false;voidconnect() {// Simulasi koneksi databaseprint('Connecting to database...'); isConnected =true; }voiddisconnect() {print('Disconnecting from database...'); isConnected =false; }voidquery(String sql) {if (!isConnected) {throwException('Database tidak terkoneksi!'); }print('Executing query: $sql'); }}voidmain() {var db =DatabaseConnection();try { db.connect(); db.query('SELECT * FROM users'); } catch (e) {print('Database error: $e'); } finally { db.disconnect(); // Selalu disconnect, sukses atau gagal }}