BAB 3: Struktur Kontrol

BAB 3: Struktur Kontrol

3.1 Percabangan (if-else)

If Statement Sederhana

void main() {
  int umur = 18;
  
  if (umur >= 17) {
    print('Anda sudah bisa membuat KTP');
  }
}

If-Else Statement

void main() {
  int nilai = 75;
  
  if (nilai >= 60) {
    print('Anda lulus!');
  } else {
    print('Anda perlu mengulang');
  }
}

If-Else If Statement

void main() {
  int nilai = 85;
  
  if (nilai >= 90) {
    print('Nilai Anda A');
  } else if (nilai >= 80) {
    print('Nilai Anda B');
  } else if (nilai >= 70) {
    print('Nilai Anda C');
  } else if (nilai >= 60) {
    print('Nilai Anda D');
  } else {
    print('Nilai Anda E');
  }
}

Nested If Statement

void main() {
  bool isLoggedIn = true;
  bool isPremium = true;
  
  if (isLoggedIn) {
    if (isPremium) {
      print('Selamat datang user premium!');
    } else {
      print('Selamat datang user reguler!');
    }
  } else {
    print('Silakan login terlebih dahulu');
  }
}

3.2 Switch Case

Switch Case Dasar

void main() {
  String hari = 'Senin';
  
  switch (hari) {
    case 'Senin':
      print('Hari kerja');
      break;
    case 'Selasa':
      print('Hari kerja');
      break;
    case 'Rabu':
      print('Hari kerja');
      break;
    case 'Kamis':
      print('Hari kerja');
      break;
    case 'Jumat':
      print('Hari kerja');
      break;
    case 'Sabtu':
    case 'Minggu':
      print('Hari libur');
      break;
    default:
      print('Hari tidak valid');
  }
}

Switch Case dengan Expression

void main() {
  int bulan = 3;
  
  String namaBulan = switch (bulan) {
    1 => 'Januari',
    2 => 'Februari',
    3 => 'Maret',
    4 => 'April',
    5 => 'Mei',
    6 => 'Juni',
    7 => 'Juli',
    8 => 'Agustus',
    9 => 'September',
    10 => 'Oktober',
    11 => 'November',
    12 => 'Desember',
    _ => 'Bulan tidak valid'
  };
  
  print('Bulan ke-$bulan adalah $namaBulan');
}

3.3 Perulangan (Loops)

For Loop

void main() {
  // Basic for loop
  for (int i = 1; i <= 5; i++) {
    print('Iterasi ke-$i');
  }
  
  // For loop dengan list
  List<String> buah = ['Apel', 'Jeruk', 'Mangga'];
  for (int i = 0; i < buah.length; i++) {
    print('Buah ke-${i+1}: ${buah[i]}');
  }
  
  // For-in loop
  for (String item in buah) {
    print('Buah: $item');
  }
}

While Loop

void main() {
  int counter = 1;
  
  while (counter <= 5) {
    print('Perulangan ke-$counter');
    counter++;
  }
}

Do-While Loop

import 'dart:io';

void main() {
  String? jawaban;
  
  do {
    print('\nMenu:');
    print('1. Lihat data');
    print('2. Tambah data');
    print('3. Keluar');
    stdout.write('Pilih menu (1-3): ');
    
    jawaban = stdin.readLineSync();
    
    switch(jawaban) {
      case '1':
        print('Menampilkan data...');
        break;
      case '2':
        print('Menambah data...');
        break;
      case '3':
        print('Terima kasih!');
        break;
      default:
        print('Menu tidak valid!');
    }
  } while (jawaban != '3');
}

3.4 Break dan Continue

Break Statement

void main() {
  // Break dalam for loop
  for (int i = 1; i <= 10; i++) {
    if (i == 5) {
      break; // Menghentikan loop saat i = 5
    }
    print(i);
  }
  
  // Break dalam while loop
  int counter = 1;
  while (true) {
    print(counter);
    if (counter == 5) {
      break;
    }
    counter++;
  }
}

Continue Statement

void main() {
  // Continue dalam for loop
  for (int i = 1; i <= 5; i++) {
    if (i == 3) {
      continue; // Melewati iterasi saat i = 3
    }
    print(i);
  }
  
  // Continue dengan while loop
  int counter = 0;
  while (counter < 5) {
    counter++;
    if (counter == 3) {
      continue;
    }
    print(counter);
  }
}

3.5 Praktek: Program Quiz Sederhana

import 'dart:io';

void main() {
  // Daftar pertanyaan dan jawaban
  List<Map<String, dynamic>> quiz = [
    {
      'pertanyaan': 'Ibukota Indonesia adalah...',
      'jawaban': 'JAKARTA',
      'poin': 20
    },
    {
      'pertanyaan': '2 + 2 = ...',
      'jawaban': '4',
      'poin': 20
    },
    {
      'pertanyaan': 'Bumi mengelilingi...',
      'jawaban': 'MATAHARI',
      'poin': 20
    }
  ];
  
  int totalSkor = 0;
  int nomorSoal = 1;
  
  print('=== SELAMAT DATANG DI QUIZ SEDERHANA ===\n');
  
  // Iterasi setiap pertanyaan
  for (var soal in quiz) {
    print('Pertanyaan $nomorSoal:');
    print(soal['pertanyaan']);
    stdout.write('Jawaban Anda: ');
    
    String? jawaban = stdin.readLineSync();
    
    if (jawaban != null && 
        jawaban.toUpperCase() == soal['jawaban']) {
      print('Benar! +${soal['poin']} poin');
      totalSkor += soal['poin'];
    } else {
      print('Salah! Jawaban yang benar: ${soal['jawaban']}');
    }
    
    print('Skor saat ini: $totalSkor\n');
    nomorSoal++;
  }
  
  // Tampilkan hasil akhir
  print('=== QUIZ SELESAI ===');
  print('Total skor: $totalSkor');
  
  // Tentukan predikat
  String predikat = switch (totalSkor) {
    >= 50 => 'Sangat Baik',
    >= 30 => 'Baik',
    >= 10 => 'Cukup',
    _ => 'Perlu Belajar Lagi'
  };
  
  print('Predikat: $predikat');
}

Latihan Mandiri

  1. Buat program untuk menentukan bilangan prima

  2. Buat game tebak angka dengan batasan percobaan

  3. Buat program untuk menampilkan pola bintang:

    *
    **
    ***
    ****
    *****

Tips Penggunaan Struktur Kontrol

  1. Gunakan if-else untuk kondisi yang sederhana

  2. Gunakan switch case untuk kondisi dengan banyak pilihan tetap

  3. Pilih jenis loop yang sesuai:

    • For: ketika jumlah iterasi atau perulangan diketahui

    • While: ketika kondisi awal penting

    • Do-while: ketika iterasi atau perulangan minimal sekali diperlukan

  4. Hindari nested if yang terlalu dalam

  5. Selalu berikan break dalam switch case

  6. Gunakan continue dengan hati-hati untuk menghindari kebingungan

  7. Berikan komentar untuk logika yang kompleks

Last updated