2013-04-28 30 views
5

Neden java.lang.Character yılında isJavaLetterOrDigit yöntem eskimiştir?NedenJavaLetterOrDigit kullanımdan kaldırıldı?

docs yöntem isJavaIdentifierPart yerine kullanılması gerektiğini, ama neden olduğu anlamına gelmez söylüyorlar. İki yönteme ait belgeler başka türlü aynıdır. Konuya yön vermek herhangi bir açıklama yapmadı.

Aslında, bir kaynak kod arama günümüzde, biri sadece diğer aramaları gösterir, böylece davranışlarında bir fark yoktur. Daha fazla kafa karıştırıcı bir isim olduğu için kullanımdan kaldırıldı mı? Oldukça garip bir karar gibi görünüyor.

@Deprecated 
public static boolean isJavaLetterOrDigit(char ch) { 
    return isJavaIdentifierPart(ch); 
} 

cevap

5

Eski (kullanımdan kaldırılmış) ad, uygulamanın gerçekte ne yaptığını doğru olarak yansıtmaz; Örneğin. Harf ya da rakam olmayan karakterleri kabul eder. Bunun, birkaç "hata" raporuyla sonuçlanacağını ve karışık geliştiricilerden gelen istekleri destekleyeceğini tahmin ediyorum. IMO, bu, yeni bir yöntem yaratmanın (eski) adımını atmanın ve eskisinden vazgeçilmesinin en büyük sebebi.

(@HuiZheng tarafından önerilen diğer nedenler, entelektüel bir düzeyde geçerli puanlardır, ancak bir yöntemi kullanımdan kaldırmayı haklı çıkarmak için yeterli DEĞİLDİR. Java milletleri, API'leri tamamen iyi API tasarım ilkeleri temelinde değiştirmeye YAN ETMEZ. geliştiriciler için çalışıyor ve Oracle bu programcıların maaşlarını ödeyen şirketleri yabancılaştırmak istemiyor. Java, istikrarlı bir platform olarak ün kazandığı için Enterprise dünyasında çok fazla çekiş kazanıyor!)

Her neyse, bu yöntemin kullanımdan kaldırılması gibi görünüyor (Bana göre) doğru nedenlerle alınan açık ve duyarlı bir API tasarım kararı gibi. Her iki durumda da görüşlerimiz tartışılıyor.

5

Sebep 1:

İyi API adı yeterince soyut (ama çok soyut değil) olmalıdır. isJavaLetterOrDigit çok uygulamaya yönelik. Gerçekten istediğiniz şey buysa, bunun yerine isLetterOrDigit kullanın.

Sebep 2: İyi bir API adı tam olarak amacına belirtmelidir ve doğru olarak uygulanması gereken

. isJavaLetterOrDigit, "_" veya "$" gibi letterOrDigit olmayan bir karaktere izin verdiği için yanlış adlandırılmıştır.

Neden 3: İyi bir API adı başkalarıyla harmonik olmalıdır

. isJavaIdentifierPart örneğin isJavaIdentifierStart, isUnicodeIdentifierPart, isIdentifierIgnorable gibi API'leri ile tutarlıdır. Bu iki API'leri arasındaki davranış hiçbir fark yoktur çünkü

Son olarak, sadece onlar özdeş olduğu anlamına gelmez. Yanıltıcı API adları, kodunuzu zehirler. Dahası, her zaman göz ardı edilen API'ları ASAP'a dökün çünkü sonuçta (veya büyük olasılıkla) kütüphane sağlayıcıları tarafından boşaltılacaklardır.

+1

Onlar ikili uyumluluk nedenleriyle, 'kütüphane sağlayıcılar tarafından terk edilmesi' olamaz. – EJP

+0

@EJP Uyumluluk nedeni biliyorum, kullanımdan kaldırılan API'ler genellikle bir süre tutulur. Fakat uzun vadede, kütüphane sağlayıcı bu uyumluluğu bozmayı seçebilir. Her neyse, bu riski almak istemiyoruz. –

+1

@HuiZheng - Geçmiş geçmişe dayanarak, yöntem kaldırılmaz. Bunu yapmak için Oracle veya onun (ödeme yapan) müşterilerinin çıkarlarında olmaz. Dokümantasyon, bu * nın * olabileceğini söylüyor ... ama ben tahmin etmeyeceğim *.(Ya da en azından Oracle, eski kodu otomatik olarak kaynak kodu VE bytecode seviyesinde yükseltmek için güvenilir araçlar sağlayamazsa). –

İlgili konular