Opakovane sa stretávam s tým, že hľadám jasnú definíciu rozdielov medzi pojmami nil?
, blank?
a empty?
v Ruby on Rails. Tu je najbližšie k tomu, čo som našiel:
Objekty blank?
sú false, prázdne alebo reťazec bielych znakov. Napríklad ""
, " "
, nil
, []
a {}
sú prázdne.
Objekty nil?
sú inštancie triedy NilClass.
Objekty empty?
sú špecifické pre jednotlivé triedy a ich definícia sa líši od triedy k triede. Reťazec je prázdny, ak neobsahuje žiadne znaky, a pole je prázdne, ak neobsahuje žiadne položky.
Chýba tu niečo, alebo je možné urobiť presnejšie porovnanie?
.nil?
možno použiť na ľubovoľný objekt a je true, ak je objekt nil.
.empty?
možno použiť na reťazce, polia a hashe a vráti true, ak:
Spustenie príkazu .empty?
na niečo, čo je nil, vyhodí chybu NoMethodError
.
Tu prichádza na rad .empty?
. Je implementovaný v systéme Rails a bude fungovať na ľubovoľnom objekte, ako aj pracovať ako .empty?
na reťazcoch, poliach a hash.
nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false
.blank?
vyhodnocuje true aj na reťazcoch, ktoré nie sú prázdne, ale obsahujú iba biele znaky:
" ".blank? == true
" ".empty? == false
Rails tiež poskytuje .present?
, ktorý vracia negáciu .blank?
.
Zádrheľ v poli: blank?
vráti false
, aj keď sú všetky elementy poľa prázdne. Ak chcete v tomto prípade určiť prázdnotu, použite napríklad all?
s blank?
:
[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true
Jedným z rozdielov je, že .nil?
a .empty?
sú metódy, ktoré poskytuje programovací jazyk Ruby, zatiaľ čo .blank?
je niečo pridané, čo poskytuje webový vývojový framework Rails.
Nezabudnite na any?
, čo je všeobecne !empty?
. V Rails zvyčajne kontrolujem prítomnosť niečoho na konci príkazu pomocou if something
alebo unless something
a potom používam blank?
, kde je to potrebné, pretože sa zdá, že to funguje všade.