Zdieľať cez


Typy v jazyku vzorcov Power Query M

Jazyk vzorcov Power Query M je užitočný a expresívny jazyk mashup údajov. Má však určité obmedzenia. Neexistuje napríklad silné vynútenie typu systému. V niektorých prípadoch je potrebné prísnejšie overovanie. Jazyk M našťastie poskytuje vstavanú knižnicu s podporou typov, aby bolo silnejšie overovanie uskutočniteľné.

Vývojári by mali dôkladne porozumieť systému typov, aby to bolo možné s akoukoľvek všeobecnosťou. A zatiaľ čo špecifikácia jazyka Power Query M dobre vysvetľuje systém typov, zanecháva to niekoľko prekvapení. Napríklad overenie inštancií funkcie vyžaduje spôsob porovnania typov na účely kompatibility.

Preskúmaním systému typov jazyka M dôkladne preskúmať mnohé z týchto problémov a vývojári budú môcť vytvárať riešenia, ktoré potrebujú.

Znalosti predikátového kalkulu a naivnej teórie množiny by mali byť adekvátne na pochopenie použitého zápisu.

PREDBEŽNÉ ÚDAJE

(1) B := { true; False }
B je typická množina booleovských hodnôt

(2) N := { platné identifikátory M }
N je množina všetkých platných názvov v jazyku M. Toto je definované inde.

(3) P := ⟨B, T
P je množina parametrov funkcie. Každý z nich je pravdepodobne voliteľný a má typ. Názvy parametrov sú irelevantné.

(4) Pn := ⋃0≤i≤ni, Pi⟩
Pn je množina všetkých zoradených postupností parametrov funkcie n.

(5) P := ⋃0≤i≤∞P i*
P* je množina všetkých možných postupností parametrov funkcie, od dĺžky 0 po zap.

(6) F := ⟨B, N, T
F je množina všetkých polí záznamov. Každé pole je pravdepodobne voliteľné, má názov a typ.

(7) Fn := ∏0≤i≤n F
Fn je množina všetkých množín n polí záznamov.

(8) F := ( ⋃0≤i≤∞Fi ) ∖ { F | ⟨b1, n1, t1⟩, ⟨b2, n2, t2⟩ ∈ Fn1 = n2 }*
F* je množina všetkých množín (ľubovoľnej dĺžky) polí záznamov, s výnimkou množín, kde viac ako jedno pole má rovnaký názov.

(9) C := ⟨N,T
C je množina typov stĺpcov pre tabuľky. Každý stĺpec má názov a typ.

C n ⊂ ⋃0≤i≤ni, C⟩
Cn je množina všetkých zoradených postupností n typov stĺpcov.

(11) C := ( ⋃0≤i≤∞Ci ) ∖ { Cm | ⟨a, ⟨n1, t1⟩⟩, ⟨b, ⟨n2, t2⟩⟩ ∈ Cmn1 = n2 }*
C* je množina všetkých kombinácií (ľubovoľnej dĺžky) typov stĺpcov, okrem tých, ktorých viac ako jeden stĺpec má rovnaký názov.

TYPY JAZYKA M

(12) TF := ⟨P, P⟩*
Typ funkcie sa skladá z typu návratu a zoradeného zoznamu parametrov funkcie nula alebo viac.

(13) T L :=〖T〗
Typ zoznamu je indikovaný daným typom (nazývaným "typ položky") zabalený v zložených zátvorkách. Keďže v metalanguage sa používajú zložené zátvorky, 〖 V tomto dokumente sa používajú zátvorky 〗 .

(14) T R := ⟨B, F⟩*
Typ záznamu má príznak označujúci, či ide o "otvorené" a polia záznamov bez poradia alebo nuly.

(15) T Ro := ⟨true, F⟩

(16) TR := ⟨false, F⟩
TRo a T R sú notové skratky pre otvorené a uzavreté typy záznamov.

(17) T:= C *
Table Type (Typ tabuľky) je zoradená postupnosť typov stĺpcov s nulami alebo viacerými, v prípade ktorých sa nevy vyskytnú žiadne kolízie názvov.

(18) TP := { any; none; null; logical; number; time; datetime; datetimezone; duration; duration; text; binary; type; list; record; table; function; anynonnull }
Primitívny typ je jeden z tohto zoznamu kľúčových slov jazyka M.

(19) TN := { tn, u ∈ T | tn = u+null } = nullable t
Akýkoľvek typ možno okrem toho označiť ako nulovateľný pomocou kľúčového slova "nullable" .

(20) T := TFT LTRTT PT N
Množina všetkých typov jazyka M je zjednotenie týchto šiestich množín typov:
Typy funkcie, typy zoznamu, typy záznamov, typy tabuliek, primitívne typy a typy s povolenou hodnotou null.

FUNKCIE

Je potrebné definovať jednu funkciu: Nenulovateľné : TT
Táto funkcia vezme typ a vráti typ, ktorý je ekvivalentný, s tým rozdielom, že nie je v súlade s hodnotou null.

IDENTÍT

Niektoré identity sú potrebné na definovanie niektorých špeciálnych prípadov a môžu tiež pomôcť s vyššie uvedeným dátumom.

(21) povolená hodnota null any = any
(22) povolená hodnota null anynonnull = any
(23) povolená hodnota null = null
(24) nulovateľný žiadny = null
(25) Nulovateľná hodnota tT = nulovateľná hodnota t
(26) NonNullable(nullable tT) = NonNullable(t) (27)
NonNullable(any) = anynonnull

KOMPATIBILITA TYPOV

Ako je definované inde, typ M je kompatovateľný s iným typom M, vtedy a len vtedy, ak všetky hodnoty, ktoré zodpovedajú prvému typu, tiež zodpovedajú druhému typu.

Tu je definovaný vzťah kompatibility, ktorý nezávisí na zodpovedajúcich hodnotách a je založený na vlastnostiach samotných typov. Očakáva sa, že tento vzťah, ako je definovaný v tomto dokumente, je úplne ekvivalentný pôvodnej sémantickej definícii.

Vzťah "je kompatibilný s": ≤ : BT × T
V sekcii nižšie bude písmo s malými písmenami vždy predstavovať prvok T typu M.

A A bude predstavovať podmnožinu F* alebo C*.

(28) tt
Táto súvislosť je reflexívna.

(29) tt bt bt ctt c
Tento vzťah je tranzitívny.

(30) žiadny ≤ žiadny
Typy M tvoria mriežku nad týmto vzťahom; žiadna nie je v dolnej časti a žiadna je na vrchu.

(31) ta, t bTNtat a → NonNullable(t a) ≤ NonNullable(tb)
Ak sú dva typy kompatibilné, potom sú kompatibilné aj nenulovateľné ekvivalenty.

(32) hodnota null ≤ tTN
Primitívny typ null je kompatibilný so všetkými typmi s povolenou hodnotou null.

(33) tTN ≤ žiadne
Všetky typy, ktoré nie súnulovateľné, sú kompatibilné s akoukoľvek nenulovou platnosťou .

(34) Nenulovateľné(t) ≤ t
Nenulovateľný typ je kompatibilný s ekvivalentom s povolenou hodnotou null.

(35) funkciaTFt
Všetky typy funkcií sú kompatibilné s funkciou .

(36) t ∈ T Lt ≤ zoznam
Všetky typy zoznamov sú kompatibilné so zoznamom .

(37) tTRt ≤ záznam
Všetky typy záznamov sú kompatibilné so záznamom .

(38) tTt ≤ tabuľke
Všetky typy tabuliek sú kompatibilné s tabuľkou .

(39) ttb ↔ 〖ta〗≤〖tb〗
Typ zoznamu je kompatibilný s iným typom zoznamu, ak sú typy položiek kompatibilné a naopak.

(40) taTF = ⟨ pa, p* ⟩, t bTF = ⟨ pb, p* ⟩ ∧ papbt a ≤ t b
Typ funkcie je kompatibilný s iným typom funkcie, ak sú vrátené typy kompatibilné a zoznamy parametrov sú identické.

t ∈ TRo, t bTRtat b
Typ otvoreného záznamu nie je nikdy kompatibilný so uzavretým typom záznamu.

(42) tTR = ⟨false, , tbTRo = ⟨true, ⟩ → t at b
Uzavretý typ záznamu je kompatibilný s inak rovnakým typom otvoreného záznamu.

(43) tTRo = ⟨true, (true, n, any⟩)⟩, tbTRo = ⟨true, V⟩ → t atbtbt a
Voliteľné pole s typom any možno ignorovať pri porovnávaní dvoch otvorených typov záznamov.

(44) t aTR = ⟨b, (ß, ⟨β, n, u a⟩)⟩, tbTR = ⟨b, (Y, ⟨β, n, ub⟩)⟩ ∧ u a ≤ u b → t a ≤ t a ≤ t b b, b⟩)⟩ ∧ a uubt a ≤ t
Dva typy záznamov, ktoré sa líšia iba jedným poľom, sú kompatibilné, ak sú názov a voliteľnosť poľa identické a typy uvedeného poľa sú kompatibilné.

(45) t a ∈ TR = ⟨b, (ß, ⟨false, n, u⟩)⟩, t bTR = ⟨b, (Μ, ⟨true, n, u⟩)⟩ → tat b
Typ záznamu s nepovinným poľom je kompatibilný s rovnakým typom záznamu, ale pre toto pole je voliteľný.

(46) t a ∈ TRo = ⟨true, (ß, ⟨b, n, u⟩)⟩, tbTRo = ⟨true, ⟩ → t at b
Typ otvoreného záznamu je kompatibilný s iným typom otvoreného záznamu s jedným menším poľom.

(47) t a ∈ TT = (V, ⟨i, ⟨n, u a⟩⟩), tbT = (i, ⟨n, ub⟩⟩) ∧ u aubtat bb⟩⟩
Typ tabuľky je kompatibilný s druhým typom tabuľky, ktorý je rovnaký, ale pre jeden stĺpec s odlišným typom, keď sú typy pre tento stĺpec kompatibilné.

ODKAZY

Microsoft Corporation (august 2015)
Špecifikácia jazyka vzorcov Microsoft Power Query pre Excel [PDF]
Získané z https://msdn.microsoft.com/library/mt807488.aspx

Microsoft Corporation (n.d.)
Referenčné informácie o funkciách jazyka Power Query M [webová stránka]
Získané z https://msdn.microsoft.com/library/mt779182.aspx