Обновить

Комментарии 9

Учитывая что в го есть нулевые значения, то можно использовать что то типа

Name: name ? “Unknown”

Следующий шаг

int x = switch (y) {
  case 1: 7;
  case 2: 38;
  default: 11;
};

Была такая мысль) более общий подход на фоне условного выражения

Но здесь с учётом конструкции type-switch уже потенциально выскакивает концепция sum-типов, которые я пока не стал реализовывать в Go. Хотя, конечно, можно принудить всегда писать default-ветку и худо-бедно дело закрыто

У нас в BLISS можно ещё сделать нечто типа такого

x = for (something) {
  if (y) 
    exitloop 10;
};

Но дефолтное значение я не помню, возможно это 0

Следующее выражение откроет портал в ад?

content, err := if check() { os.ReadFile("filename") } else { nil, nil }

Да, такой код с пересобранным мной компилятором не скомпилируется. Несколько возвращаемых выражений как у функции недопустимы для условного выражения. Поругается на запятую в nil, nil, а если это заменить на вызов функции — скажет, что используется какое-то multi-value в single-value context. Падает либо парсер, либо тайпчекер

Подобное можно позволить, но я не хотел, т.к. мне самому не очень нравятся множественные возвращаемые значения в Go, их сложно композировать и куда-то передавать. Вот, я прилагал ссылочку

Возможно, это будет связано с темой для будущей статьи, если я другую идею удачно реализую)

их сложно композировать и куда-то передавать

Да, это и есть портал в ад. Однако, это уже есть в языке и напрашивается к использованию.

Как и такое:

value := if content, err := os.ReadFile(filename); err == nil { content } else { nil }

И кстати, `else { nil }` кажется можно позволять опускать в пользу zero value.

Согласен, что в текущем состоянии языка это не сделало бы сильно хуже

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации