в java в finaly можно получить исходное искоючение и что-то сделать (не перехватить но обработать).
А можно пример этого чуда?
В C# не так. Чтобы получить исключение, нужно его перехватить. Перехватывать исключения, не перехватывая их (без catch), нельзя.
я не понимаю как try finaly решает проблему "нужно вывести ошибку в том ui компоненте, откуда пользователь кнопку нажал, а catch у нас где угодно но не там"
Это try-catch:
private void button1_Click(object sender, EventArgs e)
{
try {
throw new InvalidOperationException("The answer to the ultimate question was not 42");
}
catch (Exception ex) {
// Вывести ошибку в том ui компоненте, откуда пользователь кнопку нажал
button1.Text = $"The exception was: {ex.Message}";
// Пробрасываем выше по стеку в "где угодно"
throw;
}
}
У таких конструкций и паттернов есть фатальный недостаток,
Сильно зависит от языка. Например, в Rust есть discriminated unions, #[must_use] и try operator. Вместе они делают работу с results удобной и одновременно убирают заботливо разложенные грабли (например, случайно проигнорировать ошибку нельзя). Win-win.
В C# ничего этого нет, вот и выходит, что работать с исключениями гораздо проще. Но в целом, это не вина паттерна.
а теперь представьте, что нужно генерировать OpenAPI, чтобы клиент понимал, какие коды возможны, а у вас все NotFound и пр. в едином обработчике.
А в чём сложность? Если у вас minimal api, возвращайте из функции Results<>[1], например Results<Ok<Foo>, NotFound, Conflict>. Если MVC, навесьте ProducesResponseType[2].
В .NET вопрос часовых поясов, дат и времён, в общем-то, решён: NodaTime. От вас нужно правильно подобрать входные типы данных (в библиотеке 7 видов дат и времён), остальное вам подскажут типы.
Это не баг, не уязвимость (что?) и не ошибка логики игры. Это буквально фича оригинальной Wordle, смысл которой в том, что вы отгадываете слово, а потом идёте в твиттор, на реддит или пикабу, выкладываете вот такую штуку и меряетесь, у кого длиннее отгадано быстрее. Так вот чтобы это работало, слово у всех должно быть одно.
// Find the row containing the target cell.
let row_marker = format!("<row r=\"{}\"", row_num);
if let Some(row_start) = self
.sheet_xml
.windows(row_marker.len())
.position(|w| w == row_marker.as_bytes())
Ну как, iFeel - это те же самые инфракрасные команды, только пульт дополнительно передаёт свою температуру + ставит специальный бит, чтобы кондей не пикал. Оно автоматизируется и перезаписывается точно так же, как и все остальные настройки. То есть если вы пользуетесь одновременно и пультом, и HA, оно друг другу мешает, хоть iFeel, хоть нет.
Не соглашусь! Когда ты идёшь домой и есть возможность заранее включить кондей, чтобы охладить квартиру - это уже кайф. А проблема с обратной связью решается дверным/оконным датчиком, приклеенным на шторку. На основе датчика и команды Toggle получаете команды On и Off :)
"У вас нет ни малейшего ё%^5го понятия" это переводится :)
Так они у вас никуда не делись, только теперь размазаны по всему солюшену.
А можно пример этого чуда?
В C# не так. Чтобы получить исключение, нужно его перехватить. Перехватывать исключения, не перехватывая их (без
catch
), нельзя.Это try-catch:
К сожалению, это не так. NRT - это рекомендация, компилятор помогает как может, но гарантировать не null не может.
Делать так конечно не надо. Но технически возможность есть.
Сильно зависит от языка. Например, в Rust есть discriminated unions, #[must_use] и try operator. Вместе они делают работу с results удобной и одновременно убирают заботливо разложенные грабли (например, случайно проигнорировать ошибку нельзя). Win-win.
В C# ничего этого нет, вот и выходит, что работать с исключениями гораздо проще. Но в целом, это не вина паттерна.
Ну вот потребность выхода из вложенных циклов - повседневная жизнь.
try-finally не ловит и не обрабатывает исключения (в нём нет блока catch).
А в чём принципиальная разница?
Имхо, это сносно работает только для несложных игрушечных примеров. При первых же сложностях вроде
async
/await
читаемость сильно падает.Разумеется. В рантайме того же нашего дотнета уйма goto.
А в чём сложность? Если у вас minimal api, возвращайте из функции
Results<>
[1], напримерResults<Ok<Foo>, NotFound, Conflict>
. Если MVC, навесьтеProducesResponseType
[2].В .NET вопрос часовых поясов, дат и времён, в общем-то, решён: NodaTime. От вас нужно правильно подобрать входные типы данных (в библиотеке 7 видов дат и времён), остальное вам подскажут типы.
Это не баг, не уязвимость (что?) и не ошибка логики игры. Это буквально фича оригинальной Wordle, смысл которой в том, что вы отгадываете слово, а потом идёте в твиттор, на реддит или пикабу, выкладываете вот такую штуку и меряетесь, у кого
длиннееотгадано быстрее. Так вот чтобы это работало, слово у всех должно быть одно.Linux - достаточно современная операционка?
Это ваша библиотека так с XML работает?
Скажите, а где здесь .NET или C#? Если статья не имеет отношения к указанным технологиям, уберите её из этих хабов, пожалуйста.
Это какие коты не социальные животные?
У вас там разница меньше статистической погрешности.
Так вы создали для листа худший случай: когда вы в него добавляете новый элемент, он у вас забит под завязку, и листу приходится реаллоцироваться.
Ну как, iFeel - это те же самые инфракрасные команды, только пульт дополнительно передаёт свою температуру + ставит специальный бит, чтобы кондей не пикал. Оно автоматизируется и перезаписывается точно так же, как и все остальные настройки. То есть если вы пользуетесь одновременно и пультом, и HA, оно друг другу мешает, хоть iFeel, хоть нет.
Не соглашусь! Когда ты идёшь домой и есть возможность заранее включить кондей, чтобы охладить квартиру - это уже кайф. А проблема с обратной связью решается дверным/оконным датчиком, приклеенным на шторку. На основе датчика и команды Toggle получаете команды On и Off :)