Programlamaİş uygulamaları geliştiricisi, ERP/CRM mühendisi

Kullanıcı girdisi dizelerinin işlenmesi ve Visual Basic'te sayısal girişin kontrolü nasıl gerçekleştirilir? Dizeyi sayılara dönüştürürken nelere dikkat edilmelidir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

Visual Basic'te veriler genellikle kullanıcı tarafından dizeler olarak girilir (örneğin, TextBox veya InputBox üzerinden), ancak daha fazla işlem yapmak için bunları sayısal tiplere dönüştürmek gereklidir. VB'nin eski sürümlerinde, Val veya CInt üzerinden sıkı olmayan dönüşüm kullanılıyordu, bu da hatalı verilere bağlı açık ve örtük hatalara neden oluyordu. Dizenin her zaman doğru bir değeri içerdiği varsayılıyordu, ancak pratikte kullanıcılar genellikle hatalı karakterler girer, bu da hatalara veya yanlış dönüşümlere yol açar.

Sorun, dönüşümün korumasızlığıdır; bu durum, uygulamanın çökmesine veya yanlış hesaplamalara yol açabilir. Örneğin, Val("1a") 1 döndürecektir, bu da beklenmedik olabilir. TryParse kullanımının yanı sıra, giriş formatının sıkı bir şekilde kontrol edilmesi, bu tür hataların önlenmesine ve girişi doğru bir şekilde işlemeye olanak tanır.

Çözüm, Integer.TryParse (veya Double.TryParse vb.) yönteminin kullanılmasıdır; bu metod sadece dönüşüm başarılı olduğunda True döndürür.

Kod örneği:

Dim input As String = TextBox1.Text Dim value As Integer If Integer.TryParse(input, value) Then ' Geçerli bir sayı girildi, value değişkeni değer içerir Else MessageBox.Show("Lütfen tam sayı girin") End If

Ana özellikler:

  • TryParse hataları güvenli bir şekilde işler, istisna fırlatmaz
  • Val ve CInt kullanıcı verileri için kontrol olmadan uygun değildir
  • Yerelleştirmeyi (ondalık ayırıcılar) dikkate almak önemlidir, uygun TryParse aşırı yüklemelerini kullanmak gerekir

Aşırı sorular.

Kullanıcı girişini işleme sırasında Val fonksiyonu neden tehlikelidir?

Val, geçersiz ilk karaktere kadar sayısal bir değer döndürür ve hata fırlatmaz, bu da hatalı mantıklara yol açabilir.

Dim n = Val("12abc") ' 12 döndürecek, oysa dize geçersiz

CInt ile Integer.Parse arasındaki fark nedir?

CInt, bankacı yuvarlaması ile yuvarlama yapar; Integer.Parse ise dizeyi sayıyla tam eşleşmesini gerektirir ve hata olduğunda istisna fırlatır.

Neden TryParse "1,234" dizesi için her zaman True döndürmez?

Sonuç, Windows'un bölgesel ayarlarına bağlıdır: bazı yerlerde ondalık ayırıcı virgül, bazı yerlerde nokta olur. Formatı açıkça belirtmek önemlidir:

Dim number As Double Double.TryParse("1,234", NumberStyles.Any, CultureInfo.InvariantCulture, number)

Tipik hatalar ve anti-patrondalar

  • Val veya doğrudan dönüşüm kullanımı, kontrol olmadan
  • Bölgesel ayarların dikkate alınmaması
  • TextBox veya InputBox'tan elde edilen verilerin kontrol edilmemesi

Hayattan bir örnek

Olumsuz vaka

Finansal modül, InputBox üzerinden verileri alıyordu, Val ile dönüştürüyordu; 10,5 sayısı bazı durumlarda 10 oluyordu (virgül tanınmıyordu ve nokta girilmiyordu).

Artılar:

  • Az kod, basit görünüyor

Eksiler:

  • Veri kaybı, hesaplama hataları

Olumlu vaka

Kültürel ayarlara ve giriş alanı doğrulamasına dikkat ederek TryParse'a geçiş.

Artılar:

  • Sayının doğruluğunu garanti eder
  • Geçersiz veriler için kullanıcıya basit bir ileti verir

Eksiler:

  • Daha fazla kod gerektirir, gerekirse hata işleme ve kültür belirtimi yapılmalıdır