Kurzusok
/
Julia
Julia
/
Feladatok
/
Névkitűzők
Névkitűzők

Névkitűzők

Tanulófeladat

Bevezetés

Sok nyelvben van valami olyasmi, mint a null vagy a none, amivel egy nem létező értéket lehet jelölni. Mivel a Juliát arra tervezték, hogy nagy mennyiségű, gyakran rendezetlen adattal boldoguljon, a semminek több formáját is ismeri.

A cél összességében az, hogy a hiányzó vagy gyanús értékeket már ott megjelölje, ahol felbukkannak, majd pedig kivétel dobása nélkül folytassa.

nothing

Ha egy érték valóban nem létezik, azt a nothing jelöli. Ez áll valószínűleg a legközelebb ahhoz, amit a C (NULL) vagy a Python (None) tenne.

julia> n = nothing

julia> isnothing(n)
true

julia> typeof(n)
Nothing

A nothing tehát a Nothing típus egyetlen lehetséges értéke, és tesztelni is tudjuk.

A nothing egyik gyakori felhasználása az, hogy visszatérési (nem)értékként szolgál olyan függvényeknél, amelyeket kizárólag a mellékhatásaik miatt hívunk meg (nyomtatás, hálózati beállítások, vagy bármi hasonló).

missing

Azokban az esetekben, amikor egy érték elvileg létezik, de nem tudjuk, mi az, a missing használatos. Amikor például az úton haladó járműveket számoljuk, előfordulhat, hogy az emberi megfigyelőknek szünetet kell tartaniuk, vagy az automata érzékelők romlanak el, a forgalom viszont tovább folyik.

A missing tehát egy helyőrző, amely figyelmezteti az embereket, hogy dönteniük kell, mit kezdenek az adatokban keletkezett hézaggal.

julia> mv = [1, 2, missing]
3-element Vector{Union{Missing, Int64}}:
 1
 2
  missing

julia> typeof(mv)
Vector{Union{Missing, Int64}} (alias for Array{Union{Missing, Int64}, 1})

julia> ismissing.(mv)  # broadcast function, displays as 1 for true, 0 for false
3-element BitVector:
 0
 0
 1

Kevés más nyelvben van ez a funkció beépítve, de közeli megfelelője az R-beli NA vagy az SQL-beli NULL.

Ha missing értékek vannak jelen, a kifejezések alapértelmezés szerint általában missing-et adnak vissza. Ha azt szeretnéd, hogy ezeket az értékeket figyelmen kívül hagyják, használd a skipmissing() függvényt, hogy ezt egyértelművé tedd:

julia> mv = [1, 2, missing]
3-element Vector{Union{Missing, Int64}}:
 1
 2
  missing

julia> sum(mv)  # missing in, missing out
missing

julia> skipmissing(mv)
skipmissing(Union{Missing, Int64}[1, 2, missing])

julia> collect(skipmissing(mv))
2-element Vector{Int64}:
 1
 2

julia> sum(skipmissing(mv))  # functions like sum() can work with iterators
3

Mivel a skipmissing egy iterátort hoz létre, ha vektorra van szükséged, csomagold collect()-be.

Néha hasznos a missing értékeket valamilyen alapértelmezett értékkel helyettesíteni. Erre az @coalesce() makró hasznos, mert az első nem missing értéket adja vissza (vagy missing-et, ha nincs más).

julia> str = ["I", "exist", missing]
3-element Vector{Union{Missing, String}}:
 "I"
 "exist"
 missing

julia> [@coalesce(s, "-") for  s in str]
3-element Vector{String}:
 "I"
 "exist"
 "-"

NaN

A „Not a Number” rövidítéseként a NaN egy számítási problémát jelez olyan helyzetekben, ahol egy számot vártunk volna.

julia> v = [0, 1, -1]
3-element Vector{Int64}:
  0
  1
 -1

julia> v / 0
3-element Vector{Float64}:
 NaN
  Inf
 -Inf
 
julia> sum(v / 0)
NaN

Ha az adatok között NaN szerepel, bármilyen számítás eredménye NaN lesz.

Jelenleg nincs külön függvény a NaN értékek eltávolítására, de a szabványos filter() függvénnyel ez egészen egyszerűen megoldható. Csak azok az értékek másolódnak az eredménytömbbe, amelyekre a megadott feltétel true:

julia> filter(!isnan, [1, 2, NaN])
2-element Vector{Float64}:
 1.0
 2.0

Utasítások

Ebben a feladatban olyan kódot írsz, amely névjelvényeket készít a gyár alkalmazottainak, hogy viselhessék őket. Az alkalmazottaknak van azonosítójuk, nevük és részlegnevük. A névjelvények címkéi a következő formátumban készülnek: "[id] - name - DEPARTMENT".

1. Készíts jelvényt egy alkalmazottnak

Valósítsd meg a print_name_badge függvényt. Egy azonosítót, egy nevet és egy részleget vár. A jelvény címkéjét adja vissza, a részlegnévvel csupa nagybetűvel.

julia> print_name_badge(67, "Katherine Williams", "Strategic Communication")
"[67] - Katherine Williams - STRATEGIC COMMUNICATION"

2. Készíts jelvényt egy új alkalmazottnak

A számítógépes rendszer egy furcsasága miatt előfordul, hogy az új alkalmazottaknak még nincs azonosítójuk, amikor elkezdenek dolgozni a gyárban. Mivel a jelvény kötelező, ideiglenes jelvényt kapnak, azonosító előtag nélkül.

Egészítsd ki a print_name_badge függvényt. Ha hiányzik az azonosító, akkor nélküle készítsen jelvényt.

julia> print_name_badge(missing, "Robert Johnson", "Procurement")
"Robert Johnson - PROCUREMENT"

3. Készíts jelvényt a tulajdonosnak

Még a gyár tulajdonosának is mindig jelvényt kell viselnie. A tulajdonosnak azonban nincs részlege, és soha nem is lesz: minden részleg felett áll. Ebben az esetben a címke a részlegnév helyett "OWNER" értéket ad vissza.

Egészítsd ki a print_name_badge függvényt. Ha a részleg nothing, feltételezd, hogy a jelvény a cég tulajdonosáé.

julia> print_name_badge(204, "Rachel Miller", nothing)
"[204] - Rachel Miller - OWNER"

Vedd figyelembe, hogy előfordulhat, hogy a tulajdonos egyben új alkalmazott is.

julia> print_name_badge(missing, "Rachel Miller", nothing)
"Rachel Miller - OWNER"

4. Számítsd ki az azonosító nélküli alkalmazottak összbérét

Durva mérőszámként szeretnéd látni, hogy milyen jól halad az azonosítók kiadása: az azonosító nélküli alkalmazottak összbérét akarod megtekinteni. A magas érték azt jelenti, hogy sokan várnak, vagy hogy a probléma a tapasztalt munkatársakat is érinti: mindkettő rossz.

Valósítsd meg a salaries_no_id függvényt, amely egy azonosítókból álló vektort és a hozzájuk tartozó béreket tartalmazó vektort kap, és visszaadja azon emberek bérének összegét, akiknek még nincs azonosítójuk. Mindkét vektor ugyanolyan hosszú.

julia> ids = [204, missing, 210, 352, missing, 263]
julia> salaries = [23, 21, 47, 35, 17, 101] * 1000
julia> salaries_no_id(ids, salaries)
38,000
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Julia Exercism

Készen állsz elkezdeni a(z) Névkitűzők feladatot?

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