Stulbas beigas?

Piemērs no dzīves: ko dara nekārtīgs programmētājs, ja vajadzīga funkcija, kas “sakabina” kopā divus faila pilnās takas fragmentus? Raksta funkciju

Function getFullPath(ByVal spRoot As String, ByVal spSub As String) As String
    Return spRoot & "/" & spSub
End Function

Viss būtu labi, bet gadījumos , ja spRoot jau beidzas ar “/” simbolu, izveidosies neglīta taka ar divām slīpsvītrām pēc kārtas. Tāpēc kārtīgāks programmētājs cenšas notīrīt liekos “/” no Root beigām:

Function getFullPath(ByVal spRoot As String, ByVal spSub As String) As String
    'korekti ir nemainīt parametra vērtību funkcijā - nokopēsim
    Dim sRoot As String = spRoot

    'kamēr vien rinda beidzas ar /, dzēšam tos nost
    While Right(sRoot, 1) = "/"
        'ja būs atkārtoti / beigās, notīrīs visus
        sRoot = Left(spRoot, Len(sRoot) - 1)
    End While

    Return sRoot & "/" & spSub
End Function

Ir jau labi, tikai darba daudz. Un vispār – kāpēc tā darīt, ja ir izveidota String klases funkcija TrimEnd. Lietojot to, varam atkal funkcijas būtību ierakstīt vienā rindiņā:

Function getFullPath(ByVal spRoot As String, ByVal spSub As String) As String
    Return spRoot.TrimEnd("/"c) & "/" & spSub
End Function

TrimEnd un TrimStart funkcijām parametros var nodot sarakstu ar dažādiem simboliem, kurus mēģināt nodzēst no rindas beigām. Piemēram, ja gribam pārliecināties, ka apakšdirektorijas daļa spSub patiesībā nav līdzīga šai “../../../../windows/system32/”, varam nodzēst arī punkta simbolus no otrā parametra abu parametru savienojamajiem galiem.

Function getFullPath(ByVal spRoot As String, ByVal spSub As String) As String
    Return spRoot.TrimEnd("/"c, "/"c) & "/" & spSub.TrimStart("."c, "/"c)
End Function

Cīņa par drošu kodu? Nu, tā laikam būs.

P.S. Uzmanīgi, ja kāds no parametriem būs Nothing, funkcija metīs kļūdu!

One thought on “Stulbas beigas?”

Comments are closed.