Kurzusok
/
jq
jq
/
Feladatok
/
Járművásárlás
Járművásárlás

Járművásárlás

Tanulófeladat

Bevezetés

Összehasonlítás

Számok összehasonlítása

A jq-ban a számokat a következő relációs és egyenlőségoperátorokkal hasonlíthatod össze.

Összehasonlítás Operátor
Nagyobb mint a > b
Nagyobb vagy egyenlő a >= b
Kisebb mint a < b
Kisebb vagy egyenlő a <= b
Egyenlő a == b
Nem egyenlő a != b

Az összehasonlítás eredménye mindig logikai érték, azaz vagy true, vagy false.

1 < 3,      # => true
2 != 2,     # => false
1 == 1.0    # => true
            # All numbers are floating-points, so this is different syntax
            # for the exact same value.

Stringek összehasonlítása

A fenti összehasonlító operátorokkal stringeket is össze lehet hasonlítani. Ilyenkor a szótári (lexikográfiai) sorrend érvényesül. A sorrendet a Unicode-kódpont értéke határozza meg.

"Apple" > "Pear",   # => false
"a" < "above",      # => true
"a" == "A"          # => false

Óvatosnak kell lenned, amikor két olyan változót hasonlítasz össze, amelyek számértéket látszanak tartalmazni, de string típusúak. A szótári sorrend miatt az eredmény nem lesz ugyanaz, mint amikor number típusú értékeket hasonlítasz össze.

10 < 2,     # => false
"10" < "2"  # => true (because "1" comes before "2")

„Szigorú” egyenlőség

A jq == operátora abban az értelemben hasonlít a Javascript === operátorához, hogy azok a dolgok, amelyek ugyanúgy „kinéznek”, de különböző típusúak, nem egyenlők.

"3" == 3    # => false
            # the value on the left has type string,
            # the value on the right has type number.

Tömbök összehasonlítása

Két tömb akkor egyenlő, ha az összes megfelelő elemük egyenlő.

[1, 2, 3] == [1, 2, 3]      # => true
[1, 2, 3] == [1, 3, 2]      # => false, different order
[1, 2, 3] == [1, 2, "3"]    # => false, different types

Objektumok összehasonlítása

Két objektum akkor egyenlő, ha ugyanazok a kulcs-érték párok vannak bennük.

{name: "Joe", age: 42} == {age: 42, name: "Joe"}                # => true
{name: "Joe", age: 42} == {age: 42, name: "Jane"}               # => false
{name: "Joe", age: 42} == {age: "42", name: "Joe"}              # => false
{name: "Joe", age: 42} == {age: 42, name: "Joe", height: 175}   # => false

# comparisons will drill down as deeply as required
{a: {b: {c: [1, 2]}}} == {a: {b: {c: [1, 2]}}}                  # => true
{a: {b: {c: [1, 2]}}} == {a: {b: {c: [1, 2, 3]}}}               # => false

Feltételes szerkezetek

Az if kifejezés

A jq feltételes kifejezése az if A then B else C end.

Az if-then-else szűrő, akárcsak a jq összes beépített eleme: bemenetet kap, és kimenetet állít elő.

Ha az A kifejezés „truthy” értéket állít elő, akkor az if szűrő a B-t értékeli ki. Ellenkező esetben a C-t értékeli ki. Az if szűrő bemenete a B-hez vagy a C-hez kerül továbbításra.

42 | if . < 50 then "small" else "big" end      # => "small"
5 | if . % 2 == 0 then . / 2 else . * 4 end     # => 20
Note

Az else ág elhagyható; a következő két utasítás egyenértékű.

if A then B else . end
if A then B end

Egymásba ágyazott if utasítások

További feltételeket az elif kulcsszóval adhatsz hozzá.

42 | if . < 33 then "small"
     elif . < 66 then "medium"
     else "big"
     end
# => "medium"

Annyi elif ágat használhatsz, amennyire szükséged van.

Igazságérték

Az egyetlen „hamis” érték a jq-ban a false és a null. Minden más „igaz”, még a nulla szám, valamint az üres string, tömb és objektum is.

Logikai operátorok

A logikai operátorok (and és or) összetett lekérdezések felépítésére használhatók.

42 | if . < 33 or . > 66 then "big or small"
     else "medium"
     end

Tagadáshoz a not-ot használd. Ez egy szűrő, nem operátor.

42 | if (. < 33 or . > 66 | not) then "medium"
     else "big or small"
     end

Az alternatív operátor

Az alternatív operátor segítségével „alapértelmezett” értéket adhatsz meg arra az esetre, ha egy kifejezés hamis vagy null.

A // B

# This is identical to
if A then A else B end

Íme egy példa:

[3, 5, 18] | add / 2       # => 13
[]         | add / 2       # => error: null (null) and number (2) cannot be divided
[]         | add // 0 / 2  # => 0

Utasítások

Ebben a feladatban olyan kódot írsz, amely segít felkészülni egy jármű megvásárlására.

Három részfeladatod van: állapítsd meg, hogy szükséged lesz-e jogosítványra; válassz két jármű közül; és becsüld meg egy használt jármű elfogadható árát.

1. Állapítsd meg, hogy szükséged lesz-e jogosítványra

Egyes járműtípusok vezetéséhez jogosítvány kell. Tegyük fel, hogy csak a "car" és a "truck" típushoz kell jogosítvány; minden más vezethető jogosítvány nélkül.

Valósítsd meg a needs_license függvényt, amely a jármű típusát kapja, és egy Boolean értéket ad vissza arról, hogy kell-e jogosítvány az adott típusú járműhöz.

"car" | needs_license
# => true

"bike" | needs_license
# => false

2. Válassz a megvásárlásra szánt két lehetséges jármű közül

Mérlegelted az elérhető járműveket. Sikerült kettőre szűkítened a kört, de segítségre van szükséged a végső döntéshez. Valósítsd meg a choose_vehicle függvényt, amely két járműből álló tömböt kap bemenetként, és visszaad egy döntést: azt a lehetőséget, amelyik előrébb van szótári sorrendben.

["Wuling Hongguang", "Toyota Corolla"] | choose_vehicle
# =>  "Toyota Corolla is clearly the better choice."

["Volkswagen Beetle", "Volkswagen Golf"] | choose_vehicle
# =>  "Volkswagen Beetle is clearly the better choice."

3. Számítsd ki egy használt jármű árának becslését

Most, hogy meghoztad a döntést, szeretnéd biztosítani, hogy tisztességes árat kapj a kereskedésben. Mivel használt járművet szeretnél venni, az ár attól függ, milyen idős a jármű. Durva becslésként tegyük fel, hogy ha a jármű kevesebb mint 3 éves, az eredeti, vadonatúj kori árának 80%-át éri. Ha több mint 10 éves, az 50%. Ha a jármű legalább 3 éves, de legfeljebb 10 éves, az eredeti ár 70%-át éri.

Valósítsd meg a resell_price függvényt, amely ezt a logikát alkalmazza if, elif és else használatával. Egy objektumot kap, amely az eredeti árat és a jármű korát tartalmazza, és visszaadja a kereskedésben becsült árat.

{"original_price": 1000, "age": 1} | resell_price
# => 800

{"original_price": 1000, "age": 5} | resell_price
# => 700

{"original_price": 1000, "age": 15} | resell_price
# => 500
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
jq Exercism

Készen állsz elkezdeni a(z) Járművásárlás feladatot?

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