воскресенье, 20 января 2019 г.

Эффективный Go: управляющие структуры, оператор if

Управляющие структуры в Go родственны к структурам в C, но отличаются важными деталями. Цикла do или while нет, есть только слегка обобщенный for; switch более гибкий; if и switch принимают необязательный оператор инициализации наподобие for; операторы break и continue принимают дополнительную метку для определения break или continue; и есть новые управляющие структуры, включая type switch (переключатель типа) и мультиплексор многоканальной связи, select. Синтаксис также немного отличается: нет круглых скобок и тела всегда должны быть разделены фигурными скобками.

Оператор if

В Go простой if выглядит так:

if x > 0 {
    return y
}

Обязательные фигурные скобки поощряют написание простых операторов if на нескольких строках. В любом случае это хороший стиль, особенно когда тело содержит контролирующий оператор, такой как return или break.

Поскольку if и switch принимают выражение инициализации, часто встречается задание локальной переменной в этом выражении.

if err := file.Chmod(0664); err != nil {
    log.Print(err)
    return err
}

В Go библиотеках вы найдете случаи когда оператор if не передает поток исполнения программы следующему оператору, то есть тело заканчивается на break, continue, goto или return - ненужный else опущен.

f, err := os.Open(name)
if err != nil {
    return err
}
codeUsing(f)

Это пример распространенной ситуации, когда код должен быть защищен от последовательности условий ошибки. Код хорошо читается, если успешный поток управления идет по странице вниз, устраняя ошибки в то время когда они возникают. Так как случаи ошибок обычно заканчиваются на return операторах, результирующий код не нуждается в операторах else.

f, err := os.Open(name)
if err != nil {
    return err
}
d, err := f.Stat()
if err != nil {
    f.Close()
    return err
}
codeUsing(f, d)


Читайте также:


Комментариев нет:

Отправить комментарий