Информация об изменениях

Сообщение Re[19]: Как объяснить падение популярности .net? от 12.12.2019 18:18

Изменено 12.12.2019 18:23 zverjuga

Re[19]: Как объяснить падение популярности .net?
Здравствуйте, Mamut, Вы писали:

Z>>ты в своем уме? никто тебе не мешает делать эту проверку


M>О. У меня как раз обновился XCode и ВНЕЗАПНО if error == nil перестало выдавать ошибку "error must implement Equatable". Видимо наконец-то пофиксили компилятор.

если у тебя xcode со времен динозавров, то возможно. но такой проблемы не было никогда, начиная с самых первых версий свифта. боюсь, что ты чего то не договариваешь. или не разобрался тогда.

Z>>guard тебя избавляет от принудительного излечения значения из оптиональной переменной, так как он уже это сделал + проверка на нуль

M>То есть заставляет тебя принудительно извлекать значение при помощи гарда. Кривейшей конструкцией почти полностью повторяющей if.

это все потому что свифт поддерживается парадигмы строгой типизации. он не допускает своевольничания и предположений. если тип оптионал, то ты обязан перед тем, как работать со значением, если извлечь. при этом оператор принудительного извлечения ! не является безопасным, и ты вполне можешь получить исключением, если попытаешься что то извлечь из нуля. строгая типизация она да, такая. и использование просто IF не дает тебе гарантии, что ! не выдаст тебе исключения

Z>>можно вместо него использовать обычный let. в зависимости от ситуации используются либо let, либо guard, смотря что нужно


M>orElse/orElseThrow — это уже проверка на нуль.


а он разве не сработает после вызова метода filter? а ведь нужно — до
и лучше использовать фильтр, чем let, я это уже понял.

M>Самое прекрасное, конечно, это то, что guard на ровном месте меняет тип переменной.


guard НЕ МЕНЯЕТ тип переменной. он создает НОВУЮ переменную, в которую копируется безопасное извлечение из оптионала. то есть, чтобы было понятнее
guard let y = x else {
}


или
if let y = x {
}


создается новая КОНСТАНТА y, которая инициализируется значением из оптионала x. примеры выше были такими
guard let x = x else {
}
x.foo() // здесь X уже не тот X, который был ранее. это новая константа


и таки да, свифт позволяет делать такие вещи, чтобы не плодить лишних имен. это обычное замещение переменной, когда новое имя перебивает старое. ты волен выбирать, как тебе удобнее, так или сяк.
Re[19]: Как объяснить падение популярности .net?
Здравствуйте, Mamut, Вы писали:

Z>>ты в своем уме? никто тебе не мешает делать эту проверку


M>О. У меня как раз обновился XCode и ВНЕЗАПНО if error == nil перестало выдавать ошибку "error must implement Equatable". Видимо наконец-то пофиксили компилятор.

если у тебя xcode со времен динозавров, то возможно. но такой проблемы не было никогда, начиная с самых первых версий свифта. боюсь, что ты чего то не договариваешь. или не разобрался тогда. я по крайней мере не пропомню, когда у меня была такая проблема, правда я со свифтом начал работать около 4 лет назад только.

Z>>guard тебя избавляет от принудительного излечения значения из оптиональной переменной, так как он уже это сделал + проверка на нуль

M>То есть заставляет тебя принудительно извлекать значение при помощи гарда. Кривейшей конструкцией почти полностью повторяющей if.

это все потому что свифт поддерживается парадигмы строгой типизации. он не допускает своевольничания и предположений. если тип оптионал, то ты обязан перед тем, как работать со значением, его извлечь. при этом оператор принудительного извлечения ! не является безопасным, и ты вполне можешь получить исключением, если попытаешься что то извлечь из нуля. строгая типизация она да, такая. и использование просто IF не дает тебе гарантии, что ! не выдаст тебе исключения

Z>>можно вместо него использовать обычный let. в зависимости от ситуации используются либо let, либо guard, смотря что нужно


M>orElse/orElseThrow — это уже проверка на нуль.


а он разве не сработает после вызова метода filter? а ведь нужно — до
и лучше использовать фильтр, чем let, я это уже понял.

M>Самое прекрасное, конечно, это то, что guard на ровном месте меняет тип переменной.


guard НЕ МЕНЯЕТ тип переменной. он создает НОВУЮ переменную, в которую копируется безопасное извлечение из оптионала. то есть, чтобы было понятнее
guard let y = x else {
}


или
if let y = x {
}


создается новая КОНСТАНТА y, которая инициализируется значением из оптионала x. примеры выше были такими
guard let x = x else {
}
x.foo() // здесь X уже не тот X, который был ранее. это новая константа


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