Ruby java arayüzü karşılığı nedir?
Java yaptığımız gibi Ruby arabirimler ve Ruby modülleri veya dersleri yöntemleri arabirimi tarafından tanımlanan uygulamak için zorlar.
Bir şekilde devralma kullanmak aynı ulaşmak için method_missing ama orada daha uygun başka bir yaklaşım mevcut mu ?
CEVAP
Ruby vardırArayüzleritıpkı herhangi bir başka dil.
Bu kavramı conflate için dikkatli olmak zorunda olduğunu unutmayınArayüzüJava bir anahtar olan interface
kavramı ile bir birim sorumlulukları soyut bir şartname , garanti ve protokoller, C# ve programlama dilleri VB.NET . Ruby, eski her zaman kullanıyoruz, ama ikincisi yok.
Çok önemli iki ayırt etmek mümkün değildir. Önemli olan şeyArayüzü, interface
. interface
çok yararlı bir şey söyler. Hiçbir şey daha iyi gösterirmarker arabirimleriJava, tüm üyelerin arabirimleri: java.io.Serializable
java.lang.Cloneable
; bu iki interface
s . bir bak ^em>çokfarklı şeyler, ama onlar vartam olarak aynıimza.
Bu yüzden, farklı anlamlara interface
s, Eğer ikisi de aynı imza vartam olarakinterface
bile garanti mi?
Başka bir örnek:
package java.util;
interface List<E> implements Collection<E>, Iterable<E> {
void add(int index, E element)
throws UnsupportedOperationException, ClassCastException,
NullPointerException, IllegalArgumentException,
IndexOutOfBoundsException;
}
Bu nedirArayüzüjava.util.List<E>.add
?
- toplama uzunluğu azalma yok
- toplama önce bulunan bütün eşyalar hala orada olup olmadığını
element
koleksiyonunda
Ve bu aslında interface
gösterir? Yok! Add
yöntemi bile gerektiğini bildiren interface
başka bir şey yokturekleyinhepsi de olabilir sadeceKaldırkoleksiyonundan bir unsur.
Bu interface
Bu son derece geçerli bir uygulama
class MyCollection<E> implements java.util.List<E> {
void add(int index, E element)
throws UnsupportedOperationException, ClassCastException,
NullPointerException, IllegalArgumentException,
IndexOutOfBoundsException {
remove(element);
}
}
Başka bir örnek: 40 ** aslında bu olduğunu söylüyor, biliyorsun, birayarlayın? Hiçbir yerde! Daha doğrusu belgelerinde. İngilizce.
Java interfaces
, hem de hemen hemen tüm durumlarda .NET, hepsi builgilibilgi aslında tip değil dokümanlar. Eğer bu tür ilginç bir şey neyse söyle eğer, onları neden olmasın? Neden sadece belgelere sadık değil mi? Ve Ruby'nin yaptığı şey tam olarak bu.
Olduğunu unutmayındiğerhangi dildeArayüzüaslında anlamlı bir şekilde tarif edilebilir. Ancak, bu diller genellikle bu açıklar inşa demeArayüzü"interface
" type
diyorlar. Bir bağımlı olarak yazılan programlama dili, örneğin, ifade özellikleri bir sort
işlevi, bir koleksiyon aynı uzunlukta orijinal, her element hangisi orijinal olduğunu da sıralanmış toplama ve bu büyük unsur ortaya çıkmadan önce daha küçük bir eleman.
Yani, Kısacası: Ruby 23* *bir Java için bir eşdeğeri yok.yokancak, bir Java için bir eşdeğer varArayüzütam olarak Java aynı şey , ve belgeler.
Java gibi, aynı zamandaKabul Testleribelirtmek için kullanılabilirArayüzleride.
Ruby, özellikleArayüzübir nesnenin ne göre belirleniryapınclass
ne, ya da karıştırır., <<
bir yöntem olan herhangi bir nesne eklenebilir. Bu çok yararlı bir birim testleri, nereye sen-ebilmek basitçe geçişte bir Array
String
yerine daha karmaşık Logger
olsa Array
Logger
paylaşıyoruz açık interface
dışında aslında her ikisi de var bir yöntemi denir <<
.
Başka bir örnek, aynı uygulayan StringIO
ArayüzüIO
ve böylece büyük bir kısmı gibiArayüzüObject
ayrıca herhangi bir ortak ata paylaşmadan File
ama.
ETMENİZ için Java karşılığı nedir?...
Objective-C's "örneğin,"...
PHP var_dump Java karşılığı nedir?...
Ruby attr_accessor nedir?...
C Çifti eşdeğer<L,R> Java nedir?...