Kurzusok
/
Java
Java
/
Feladatok
/
Karl nyelvei
Karl nyelvei

Karl nyelvei

Tanulófeladat

Bevezetés

Generikus típusok

A generikus típus olyan generikus osztály vagy interfész, amelyet típusokra paraméterezünk. Ez lehetővé teszi, hogy a fordító kikényszerítse a típusbiztonságot az osztályon vagy az interfészen.

Vegyük szemügyre ezt a nem generikus Container interfészt:

class Container {
    private Object object;

    public void set(Object object) { this.object = object; }
    public Object get() { return object; }
}

Mivel Object típusokat fogad és ad vissza, bármilyen nem primitív típussal működik. Ez azonban áldozattal jár, mert előfordulhat, hogy az egyik kódrészlet Integer értékekre számítva hívja meg a get metódust, miközben egy másik kódrészlet String értékeket adva hívja a set metódust, ami futásidejű kivételhez vezet.

A generikus osztály és a generikus interfész formátuma a következő:

class ClassName<T1, T2, ..., Tn> { ... }
interface InterfaceName<T1, T2, ..., Tn> { ... }

Az osztály vagy interfész neve után álló, csúcsos zárójelekkel (<>) határolt típusparaméter-szakasz adja meg a típusparamétereket (más néven típusváltozókat): T1, T2, ..., Tn. Ezeket az osztály vagy interfész törzsében használhatod, hogy megkapd a generikus típusbiztonságot.

Íme a Container generikus változata:

class Container<E> {
    private E object;

    public void set(E object) { this.object = object; }
    public E get() { return object; }
}

Létrehozásakor meg kell adnunk, milyen típust tárol, és a fordító kikényszeríti ezt a megszorítást:

// empty <> can infer from context
Container<String> stringContainer = new Container<>();
// compiler knows this is a String, so it is allowed
stringContainer.set("Some string");
// no cast needed, compiler knows it is a String
String result = stringContainer.get();
// this causes a compiler error:
stringContainer.set(42);

Listák

A listák a rendezett sorozatot megvalósító kollekciók Java-ban. A tömbökkel ellentétben a List mérete növekedhet, hogy bármennyi elemet befogadjon. Az egyik szabványos implementáció az ArrayList, amelyet egy átméretezhető tömb támogat. Egy másik szabványos implementáció a LinkedList osztály, amelyet egy kétszeresen láncolt lista támogat.

A List lehet üres, vagy tetszőleges számú elemet tartalmazhat (az ismétlődőket is beleértve). A List generikus interfész, amelynek típusa megmutatja, milyen típusú objektumokat tartalmazhat. Például:

List<String> emptyListOfStrings = List.of();
List<Integer> singleInteger = List.of(1);
List<Boolean> threeBooleans = List.of(true, false, true);
List<Object> listWithMultipleTypes = List.of("hello", 1, true);

A List számos hasznos metódussal rendelkezik elemek hozzáadásához, eltávolításához, lekéréséhez és egy elem meglétének ellenőrzéséhez:

List<Character> vowels = new ArrayList<>(List.of('a', 'e', 'i', 'o', 'i', 'e', 'a'));
int startingSize = vowels.size(); // 7
vowels.add('u'); // vowels is now ['a', 'e', 'i', 'o', 'i', 'e', 'a', 'u']
char a = vowels.get(0); // 'a'
boolean hadI = vowels.remove('i'); // true and vowels is now ['a', 'e', 'o', 'i', 'e', 'a', 'u']
boolean hasI = vowels.contains('i'); // true (still have one more left)

Utasítások

Karl listát szeretne vezetni azokról a nyelvekről, amelyeket az Exercism weboldalán szeretne megtanulni. Karlnak új nyelveket kell tudnia hozzáadni, a régieket eltávolítani, és ellenőrizni, hogy bizonyos nyelvek rajta vannak-e a listán. Nagyon izgalmas lenne, ha Karl Javát vagy Kotlint szeretne tanulni!

1. Definiálj egy függvényt, amely ellenőrzi, hogy üres-e a nyelvek listája

Karlnak tudnia kell, ha egyszer üres lesz a nyelvek listája, hogy újabbakat kereshessen, amiket megtanulhat! Definiálj egy isEmpty nevű metódust, amely akkor ad vissza true-t, ha egyetlen nyelv sincs a listában.

if (languageList.isEmpty()) {
    findMoreLanguagesToLearn();
}

2. Definiálj egy függvényt, amely hozzáad egy nyelvet a listához

Karl már alig várja, hogy Kotlint és Pythont tanulhasson! Segíts Karlnak elkezdeni: definiálj egy addLanguage nevű metódust, amely átveszi a nyelvet, amit meg szeretne tanulni, és hozzáadja a listához.

languageList.addLanguage("Kotlin");
languageList.addLanguage("Python");

3. Definiálj egy függvényt, amely eltávolít egy nyelvet a listáról

Karl úgy döntött, hogy egyelőre nem szeretne Scalát tanulni. Segíts Karlnak eltávolítani a listáról: definiálj egy removeLanguage nevű metódust, amely átveszi az eltávolítandó nyelvet, és eltávolítja a listáról.

languageList.removeLanguage("Scala");

4. Definiálj egy függvényt, amely visszaadja a lista első elemét

Karl szeretne emlékezni az első nyelvre, amelyet a listához adott (és amely még mindig rajta van a listán). Definiálj egy firstLanguage nevű metódust, amely visszaadja a lista első nyelvét.

String kotlin = languageList.firstLanguage(); // "Kotlin"

5. Definiálj egy függvényt, amely visszaadja, hány nyelv van a listában

Karlnak tudnia kell, hány nyelvet próbál megtanulni. Segíts Karlnak megtalálni a választ: definiálj egy count nevű metódust, amely visszaadja a listában lévő nyelvek számát.

int two = languageList.count(); // 2

6. Definiálj egy függvényt, amely megállapítja, hogy egy nyelv rajta van-e a listán

Karl éppen azon gondolkodik, hogy a Pythont vagy a Ruby-t akarta-e megtanulni. Definiálj egy containsLanguage nevű metódust, amely átveszi a nyelvet, amiről érdeklődik, hogy Karl megtudhassa!

boolean learningPython = languageList.containsLanguage("Python"); // true
boolean learningRuby = languageList.containsLanguage("Ruby"); // false

7. Definiálj egy függvényt, amely megállapítja, hogy izgalmas-e a lista

Ha Karl Javát vagy Kotlint szeretne tanulni, az nagyon izgalmas! Definiálj egy isExciting nevű metódust, amely igazat ad vissza, ha Karl Javát vagy Kotlint szeretne tanulni.

javaLanguageList.isExciting() // true
neitherKotlinNorJavaLanguageList.isExciting() // false
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Java Exercism

Készen állsz elkezdeni a(z) Karl nyelvei feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Java nyelvet 26 fogalom158 feladat segítségével, valódi emberi mentorálással, mindez ingyen.