Sobes.tech
Middle

Чаро дар функсия як блок иловагии иловагӣ истифода мешавад?

sobes.tech AI

Ҷавоб аз AI

Дадатковы блок з фігурнымі дужкамі ўнутры функцыі стварае новую вобласць бачнасці (scope). Гэта карысна ў наступных выпадках:

  1. Часовае выдзяленне памяці: Зменныя, аб'яўленыя ў такім блоку, існуюць толькі ў межах гэтага блока. Пасля выхаду з яго памяць, выдзеленая пад гэтыя зменныя, можа быць вызвалена зборшчыкам смецця. Гэта дапамагае кіраваць рэсурсамі, асабліва ў доўгіх цыклах або пры працы з вялікай колькасцю часовых аб'ектаў.

    func processData(data []*int) {
        for _, item := range data {
            { // Пачатак новага scope
                tempVar := *item * 2 // tempVar бачная толькі тут
                if tempVar > 100 {
                    // рабіць нешта
                }
            } // tempVar больш не існуе
            // tempVar недаступна тут
        }
        // tempVar недаступна тут
    }
    
  2. Кіраванне defer: Інструкцыі defer, размешчаныя ўнутры блока, будуць выкананы пры выхадзе менавіта з гэтага блока, а не з усёй функцыі. Гэта дазваляе кіраваць момантам выканання адкладзеных аперацый, напрыклад, закрыцця файлаў або разблакоўкі мьютэксаў раней, чым завершана ўся функцыя.

    func readFile(filename string) ([]byte, error) {
        f, err := os.Open(filename)
        if err != nil {
            return nil, err
        }
        // defer f.Close() // Гэта зачыніцца ў канцы функцыі
    
        { // Пачатак новага scope
            defer f.Close() // Гэта зачыніцца пры выхадзе з гэтага блока
            // Чытанне з f
            data, readErr := ioutil.ReadAll(f)
            if readErr != nil {
                return nil, readErr
            }
            return data, nil
        } // f.Close() выканана тут
    
        // f ужо закрыты
    }
    
  3. Паляпшэнне чытальнасці: У некаторых рэдкіх выпадках выразнае аддзяленне секцыі кода ў блок можа палепшыць чытальнасць, групуючы звязаныя аперацыі і дэманструючы іх абмежаваную вобласць бачнасці. Аднак злоўжываць гэтым не варта, бо гэта можа зрабіць код менш зразумелым.

У цэлым, асноўная мэта — стварэнне абмежаванай вобласці бачнасці для кіравання жыццём зменных і выканання адкладзеных аперацый (defer).