Eğer soru şu gibi görünüyorsa: "Tek bir int döndüren bir yöntemden iki ilgisiz bilgi parçasını nasıl geri gönderirim? Dönüş değerleriimi asla kontrol etmek istemiyorum ve boş değerler kötüdür, bunları kullanmayın."
Neyi geçmek istediğine bakalım. Neden int veremediğiniz için bir int veya int dışı bir gerekçe geçiyorsunuz. Soru, yalnızca iki nedenin olacağını iddia ediyor, ancak enum yapan herkes herhangi bir listenin artacağını biliyor. Diğer gerekçeleri belirleme kapsamı anlamlıdır.
Başlangıçta, o zaman, bu bir istisna atmak için iyi bir durum olabilir gibi görünüyor.
Arayan kişiye dönüş türünde olmayan özel bir şey söylemek istediğinizde, istisnalar genellikle uygun sistemdir: istisnalar yalnızca hata durumları için değildir ve neden yapabileceğinizi açıklamak için çok fazla bağlam ve mantık döndürmenizi sağlar. Bugün int değil.
Ve bu, SADECE garantili-geçerli girişleri iade etmenizi sağlayan ve sisteme giren her int operatörünün ve metodunun, null ya da sihirli değerler gibi geçersiz değerleri kontrol etmek zorunda kalmadan bu metodun dönüş değerini kabul edebileceğini garanti eden SADECE sistemdir.
Ancak, istisnalar, yalnızca adından da anlaşılacağı gibi, işin normal seyri değil, istisnai bir durumsa, gerçekten geçerli bir çözümdür .
Ve bir dene / yakala ve işle, nihayetinde itiraz edilen boş bir çek kadar kazandır.
Ve eğer arayan / deneyen / yakalayan yoksa, arayanın yapması gerekenler vb.
Saf bir ikinci geçiş "Bu bir ölçümdür. Olumsuz mesafe ölçümlerinin olasılığı düşüktür" demektir. Yani, bazı ölçümler için, sadece
- -1 = bilinmiyor,
- -2 = ölçülmesi imkansız,
- -3 = cevap vermeyi reddetti,
- -4 = bilinen ancak gizli
- -5 = Ay fazına bağlı olarak değişir, bakınız tablo 5a,
- -6 = dört boyutlu, başlıkta verilen ölçümler,
- -7 = dosya sistemi okuma hatası,
- -8 = ileride kullanılmak üzere ayrılmıştır,
- -9 = kare / kübik yani Y, X ile aynı
- -10 = bir monitör ekranıdır, bu nedenle X, Y ölçümleri kullanılmaz: X'i ekran çapraz olarak kullanın,
- -11 = bir makbuzun arkasına yapılan ölçümleri yazdı ve okunaksızlığa çarptı, ancak 5 ya da 17 olduğunu düşünüyorum.
- -12 = ... fikri anladın.
Bu, pek çok eski C sisteminde ve hatta int için gerçek bir kısıtlamanın olduğu modern sistemlerde yapılmasının şeklidir ve bunu bir tür yapıya veya monad'a saramazsınız.
Ölçümler negatif olabilirse, o zaman veri türünüzü daha büyük hale getirin (örneğin, uzun int) ve sihir değerlerinin int aralığından daha yüksek olmasını sağlayın ve ideal olarak, hata ayıklayıcıda açıkça görünecek bir değerle başlayın.
Yine de, onları sadece sihirli sayılara sahip olmak yerine, ayrı bir değişken olarak kullanmak için iyi sebepler var. Örneğin, katı yazma, bakım ve beklentilere uygunluk.
Üçüncü girişimde, int-dışı değerlere sahip olmanın normal iş akışının olduğu durumlara bakarız. Örneğin, bu değerlerden oluşan bir koleksiyon birden çok tamsayı olmayan girdi içeriyorsa. Bu, bir istisna işleyicisinin yanlış yaklaşım olabileceği anlamına gelir.
Bu durumda, int ve mantığı geçen bir yapı için iyi bir durum görünüyor. Yine, bu mantık, sadece yukarıdaki gibi bir yapı olabilir, ancak ikisini de aynı int'de tutmak yerine, bunları bir yapının farklı parçaları olarak saklarsınız. İlk olarak, gerekçe belirlenirse, int'nin ayarlanmayacağına dair bir kural vardır. Fakat biz artık bu kurala bağlı değiliz; Gerektiğinde geçerli sayılar için de rasyonlar sağlayabiliriz.
Her iki şekilde de, onu her aradığınızda, int'nin geçerli olup olmadığını görmek için gerekçeyi test etmek için yine de bir platforma ihtiyacınız var, ardından gerekçe bize izin veriyorsa int bölümünü çekin ve kullanın.
"Boş kullanmayın" arkasındaki nedeninizi araştırmanız gereken yer burasıdır.
İstisnalar gibi, null istisnai bir durumu belirtmek içindir.
Eğer bir arayan bu metodu çağırıyorsa ve yapının "mantık" kısmını tamamen görmezden geliyorsa, herhangi bir hata işlemeden bir sayı bekler ve sıfır alırsa, sıfırı sayı olarak ele alır ve hatalı olur. Sihirli bir sayı alırsa, bunu bir sayı olarak görür ve yanlış olur. Ama eğer boşalırsa, yapması gerektiği gibi düşecek .
Bu nedenle, bu yöntemi her çağırdığınızda, dönüş değerini kontrol etmelisiniz, ancak bant içi veya bant dışı, geçersiz değerleri ele almayı deneyin, yakalayın, bir "mantıksal" bileşen için yapıyı kontrol edin, int'yi kontrol edin sihirli bir numara için veya boş bir int için denetleme ...
Alternatif, geçersiz bir int ve "Köpeğim bu ölçümü yedi" gibi bir mantık içerebilecek bir çıktının çarpımını ele almanın alternatifini, bu yapı için çarpma operatörünü aşırı yüklemektir.
... Daha sonra, uygulamanızda bu verilere uygulanabilecek tüm diğer operatörleri aşırı yükleyin.
... Ve sonra, giriş yapabilen tüm yöntemleri aşırı yükleyin.
... Ve bu aşırı yüklerin hepsinin hala geçersiz girişler için çekler içermesi gerekecek; bu nedenle, bu yöntemi geri döndürme türünü, aradığınız zaman geçerli bir int olmuş gibi ele alabilirsiniz.
Bu yüzden orijinal öncül çeşitli şekillerde yanlıştır:
- Geçersiz değerleriniz varsa, değerleri geçersiz kıldığınız koddaki herhangi bir noktada bu geçersiz değerleri kontrol etmekten kaçınamazsınız.
- Bir int dışında bir şey döndürüyorsanız, bir int döndürmezsiniz, bu nedenle bir int gibi davranamazsınız. Operatör aşırı yükleme yapmanıza olanak sağlar taklit etmek, ama bu sadece taklit ediyor.
- Sihirli sayıları olan bir int (NULL, NAN, Inf ... dahil) artık gerçekten bir int değil, fakir bir insanın yapısı.
- Boş değerlerden kaçınmak, kodu daha sağlam hale getirmez, yalnızca ints ile ilgili sorunları gizler veya karmaşık bir istisna işleme yapısına taşır.