IIf()
funkce a IIf()
prohlášení jsou zásadně odlišná zvířata.
Bohužel je téměř nelze rozeznat. A přesto je důležité to umět. Proč?
Protože tato funkce IIf(). je runtime chyba, která čeká na to, až se stane:
IIf(Attempts = 0, 0, Successes / Attempts)
Zatímco toto IIf() prohlášení bezpečně vrátí hodnotu, i když Attempts = 0
:
IIf(Attempts = 0, 0, Successes / Attempts)
Dokážete tedy rozeznat rozdíl mezi těmito dvěma?
Telling Them Apart
Pokud nevidíte rozdíl mezi dvěma výše uvedenými vzorky, je to proto, že mezi nimi není žádný rozdíl.
The IIf()
funkce vypadá stejně jako IIf()
prohlášení.
Rozdíl je v tom, jak – nebo přesněji kde– jsou hodnoceny.
- Funkce IIf Funkce je členem standardní knihovny VBA.Interaction.
- Prohlášení IIf je vyhodnocen službou Expression Service (acees.dll) databázového stroje Jet/ACE.
O rozdílech mezi kódem a výrazy jsem psal zde:
Výrazy vs. kód Kdy kód není kód? Když je to výraz. Jaký je rozdíl a koho to vlastně zajímá? Pojďme prozkoumat. Už neset Mike WolfeZákladní rozdíl mezi funkcí IIf() a příkazem IIf()
Tři slova:vyhodnocení zkratu.
- Prohlášení IIf má to.
- Funkce IIf ne.
Co je to vyhodnocení zkratu?
Při vyhodnocování zkratů kód vyhodnocuje pouze ty výrazy, které jsou nezbytné k určení výsledku.
Příkaz IIf a funkce IIf mají tři argumenty:
- výraz: booleovská podmínka
- pravdivá část: výsledek se vrátí, pokud expr je Pravda
- falešná část: výsledek se vrátí, pokud expr je False
S příkazem IIf jsou vždy vyhodnoceny pouze dva z těchto argumentů:expr a – v závislosti na výsledku expr– buď pravdivou část NEBO falešná část .
S funkcí IIf MUSÍ být všechny tři argumenty vyhodnoceny dříve, než jsou předány funkci.
Proč na tom záleží
Vraťme se k původnímu příkladu kódu:
IIf(Attempts = 0, 0, Successes / Attempts)
Co se stane, když hodnota Pokusy je nula?
IIf prohlášení
- výraz vyhodnotí jako True.
- pravdivá část se vyhodnotí jako
0
. - Příkaz vrací
0
.
IIf funkce
- výraz vyhodnotí jako True.
- pravdivá část se vyhodnotí jako
0
. - falešná část vyhodnotí jako #ERROR#:Dělení nulou
Funkce verze vrací chybu, protože byla nucena vyhodnotit obě pravdivá část a falešná část výrazy.
Kde je IIf Považováno za prohlášení?
IIf je vyhodnocen jako výrok na následujících místech:
- Dotazy
- Vlastnosti formuláře/přehledu/ovládacího prvku (např. zdroj ovládacího prvku TextBox)
- Funkce Access Application.Eval()
Další podrobnosti – včetně toho, jak definitivně otestovat, zda IIf je považováno za příkaz nebo funkci – přečtěte si můj článek o rozdílech mezi výrazy a kódem:Výrazy vs. kód .