Menu
Coddy logo textTech

'on' ile İstisnaları Yakalamak

Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası — ders 40 / 65.

Temel try-catch bloğu meydana gelen her türlü istisnayı yakalarken, bazen farklı istisna türlerini farklı şekillerde ele almanız gerekir. on anahtar kelimesi, belirli istisna türlerini yakalamanıza ve her biri için özel yanıtlar sunmanıza olanak tanır.

Tüm istisnaları genel bir catch ile yakalamak yerine, istisna türünden sonra gelen on anahtar kelimesini kullanarak belirli istisnaları hedefleyebilirsiniz. Bu, programınızın farklı hata durumlarına nasıl yanıt vereceği konusunda size daha fazla kontrol sağlar.

try {
  int number = int.parse("abc");
} on FormatException {
  print("Please enter a valid number");
}

Bu örnekte, kod özellikle geçersiz bir metni sayı olarak ayrıştırmaya çalışırken oluşan bir FormatException yakalar. Bu, kullanıcıların kafasını karıştırabilecek genel bir hata mesajı göstermek yerine, sorunu doğrudan ele alan net ve kullanıcı dostu bir mesaj sunmanıza olanak tanır.

Farklı istisna türlerini uygun yanıtlarla ele almak için birden fazla on bloğunu birleştirebilir, böylece hata yönetiminizi hem kesin hem de kullanıcı dostu hale getirebilirsiniz.

challenge icon

Görev

Kolay

on anahtar kelimesini kullanarak belirli istisnaları yakalamayı gösteren bir program oluşturun. Programınız farklı türdeki kullanıcı girdilerini işleyecek ve belirli istisna türlerini özelleştirilmiş hata mesajlarıyla ele alacaktır.

  1. Bir matematiksel ifade türünü temsil eden bir dize girdisi okuyun ("parse", "divide" veya "access")
  2. Birinci değeri temsil eden bir dize girdisi okuyun
  3. İkinci değeri temsil eden bir dize girdisi okuyun (uygun olduğunda)
  4. İfade türüne bağlı olarak, belirli istisna yönetimi kullanarak ilgili işlemi gerçekleştirin:
    • "parse" için: int.parse() kullanarak birinci değeri bir tam sayıya dönüştürün ve özellikle FormatException istisnasını yakalayın
    • "divide" için: Her iki değeri de tam sayı olarak ayrıştırın ve bölme işlemini gerçekleştirin, ayrıştırma hataları için FormatException istisnasını yakalayın
    • "access" için: Birinci değerle bir liste oluşturun ve ikinci değerle belirtilen indekse erişin, geçersiz indeksler için RangeError istisnasını yakalayın
  5. Sonuçları veya belirli hata mesajlarını aşağıda gösterilen tam formatta görüntüleyin

Örneğin, girdiler "parse", "42", "unused" ise programınızın çıktısı şöyle olmalıdır:

Operation: parse
Input: 42
Parsing successful!
Result: 42

Girdiler "parse", "xyz", "unused" ise programınızın çıktısı şöyle olmalıdır:

Operation: parse
Input: xyz
FormatException caught: Invalid number format
Please provide a valid integer

Girdiler "divide", "10", "2" ise programınızın çıktısı şöyle olmalıdır:

Operation: divide
Values: 10, 2
Division successful!
Result: 5

Girdiler "divide", "10", "abc" ise programınızın çıktısı şöyle olmalıdır:

Operation: divide
Values: 10, abc
FormatException caught: Invalid number format
Cannot perform division with invalid numbers

Girdiler "access", "hello", "1" ise programınızın çıktısı şöyle olmalıdır:

Operation: access
List: [hello]
Index: 1
RangeError caught: Index out of range
Valid indices are 0 to 0

Programınız, özellikle FormatException ve RangeError istisnalarını yakalamak için on anahtar kelimesiyle ayrı try-catch blokları kullanmalıdır. Her istisna türünün, neyin yanlış gittiğini açıkça açıklayan kendine özgü bir hata mesajı olmalıdır. "access" işlemi için, yalnızca ilk girdi değerini içeren bir liste oluşturun ve ikinci girdi değeriyle belirtilen indekse erişmeye çalışın.

Kopya kağıdı

Genel bir catch bloğu kullanmak yerine belirli hata türlerini yakalamak için on anahtar kelimesini kullanın:

try {
  int number = int.parse("abc");
} on FormatException {
  print("Please enter a valid number");
}

Farklı hata türlerini uygun yanıtlarla ele almak için birden fazla on bloğunu birleştirebilirsiniz:

try {
  // farklı hatalar fırlatabilecek bazı kodlar
} on FormatException {
  print("Invalid format error");
} on RangeError {
  print("Index out of range error");
}

Bu yaklaşım, her bir özel hata türü için özelleştirilmiş yanıtlar verilmesine olanak tanıyarak hata yönetimi üzerinde daha fazla kontrol sağlar.

Kendin dene

import 'dart:io';

void main() {
  // Girdiyi oku
  String? operation = stdin.readLineSync();
  String? firstValue = stdin.readLineSync();
  String? secondValue = stdin.readLineSync();
  
  // İşlem bilgisini görüntüle
  print('Operation: $operation');
  
  // TODO: Kodunuzu aşağıya yazın
  // Belirli istisnaları işlemek için 'on' anahtar kelimesiyle try-catch bloklarını kullanın
  // Ayrıştırma (parse) ve bölme işlemleri için FormatException'ı ele alın
  // Erişim işlemi için RangeError'ı ele alın
  
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler