isEmpty ir skaičius == 0

Palyginti „Swift“ stygų dydžius atrodo paprasta ir nereikšminga, tačiau yra įvairių būdų, kaip tai padaryti

Linho Phamo nuotrauka „Unsplash“

„Apple“ sako, kad geriau naudoti „IsEmpty over count“. Pažvelkime į priežastis.

Užsakymų palyginimas

Kalbant apie našumą, „IsEmpty“ vykdo O (1), tačiau skaičiuoja, kad tai daro O (N), kur N yra eilutės simbolių skaičius.

Per trumpą eilutę nepastebėsite jokių vykdymo laiko problemų, tačiau dirbant su ilgomis stygomis skirtumas (sekundėmis) yra nemažas. Vykdžiau eksperimentą, kurio metu apskaičiavau sekundes, kurių prireikė skaičiuojant ir „eEmpty“ naudojant skirtingų dydžių stygas. Rezultatai parodė, kad „isEmpty“ rodo beveik pastovias reikšmes, tačiau skaičius žymiai padidina vykdymo laiką, kai eilutė tampa ilgesnė.

Eksperimento rezultatai

Skaitomumas

Kodo skaitomumo požiūriu „isEmpty“ yra daug lengviau skaitomas nei skaičiuojamas. Pažvelkime į šį kodą:

Jei versime kodą žodžiais, naudodami „IsEmpty“, galite lengvai perskaityti: „Jei tekstas tuščias, padarykite ką nors“. Tačiau „jei teksto skaičius lygus nuliui, padaryk ką nors“ nėra taip skaitomas - reikia galvoti, ką tai reiškia.
Iš esmės „isEmpty“ pateikia loginį atsakymą į loginį klausimą.

Nebūtina

Kai stygos yra pasirenkamos, reikia atsižvelgti į keletą dalykų.
Jei norite patikrinti, ar pasirenkama eilutė yra tuščia, to negalite padaryti tiesiogiai:

Tuomet turite nuspręsti dėl vieno iš šių būdų:

Kai naudojate skaičiavimą su pasirenkamomis stygomis, jums nereikia specialiai atsižvelgti - tai skaičiavimo pranašumas.

Asmeniškai aš norėčiau naudoti požiūrį Nr. 3 ar Nr. 4, atsižvelgiant į tai, ar žinau, kad stygos yra nulinės, ar ne.

Nenaudokite == nulio norėdami patikrinti, ar jūsų styga tuščia, ar ne - tai tik pasakys, kad styga egzistuoja, taigi tuščia eilutė praeis šį patikrinimą.

Apibrėžimai

„Apple“ apibrėžta „isEmpty“ yra „loginė reikšmė, nurodanti, ar eilutė neturi simbolių“, o skaičius yra „simbolių skaičius eilutėje“.

count skaičiuoja elementų kiekį nuo 0 iki indekso N, taigi O (N) našumas. Tačiau patikrinus, ar „String isEmpty“ naudoja tik loginę reikšmę, tada O (1).

Geroji praktika

„SwiftLint“ pateikia dvi naudingas taisykles:

  • empty_count: patikrina „isEmpty“ naudojimą, palyginti skaičių iki nulio.
  • empty_string: tikrina „isEmpty“ naudojimą, o ne lygina eilutę su tuščia eilutės pažodžiu.

Abi taisyklės yra pasirenkamos ir jas turite nurodyti savo .swiftlint.yml faile. Tada galite sukonfigūruoti, ar norite pateikti įspėjimą ar kompiliavimo klaidą „Xcode“.

„SwiftLint“: „empty_count“ ir „empty_string“

Santrauka

Atlikus analizę aišku, kodėl „Apple“ rekomenduoja naudoti „isEmpty over count“:

  • Našumas: „isEmpty“ yra daug naudingesnis nei skaičius: O (1) vs O (N)
  • Skaitomumas: „isEmpty“ lengviau skaityti nei skaičiuoti
  • Pasirenkami variantai: skaičiavimo pranašumai dirbant su pasirenkamaisiais nėra svarus argumentas, todėl rekomenduojama naudoti „isEmpty“.
  • Geroji praktika: „SwiftLint“ pateikia naudingas taisykles, skirtas patikrinti, ar jūsų kodas atitinka šią gerą praktiką.