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

Сообщение Re[13]: Тенденции языков от 22.05.2015 0:40

Изменено 22.05.2015 0:42 Mystic Artifact

Здравствуйте, AlexRK, Вы писали:

M>>В итоге, любой функции, даже написанной через три месяца другим человеком четырьмя уровнями выше, рпидется столкнуться с тем, что возвращается не нужное значение, а никому не нужная обертка Result<список любых типов любой сложности, внутренности или вложенности>?

ARK>Ну так пусть функция возвращает нужное значение, в чем проблема? Ах, внутри файл читается? Тогда будьте добры отреагировать на потенциальный сбой.
ARK>Не хотите? Используйте другие языки, никто не против.
ARK>Лично мне нравится подход Rust/Swift.
Как минимум, проблема в том, что код который может бросить исключение или ошибку — может вызываться косвенно.
При чём обработка ошибки — не ответственность вызывающего кода.
Однако, не забудь, что разработчик того самого кода, который вызывается косвенно, не только тебя не знает, но даже и не догадывается.

        static int Main(string[] args)
        {
            var fileNames = new string[] { "header.js", "library.core.js",  "library.ext.js", "footer.js" };
            try
            {
                var content = fileNames
                    .Select(x => "// " + x + "\n" + File.ReadAllText(x) + "\n") // лямбда - тот самый код
                    .Aggregate((current, next) => current + next);
                return 0;
            }
            catch (Exception ex) // а тут нам вообще пофиг, что упало, но должно быть записано в лог, да ещё со стек-трейсом, что бы было понятно, кто виноват
            {
                Console.WriteLine("Error! {0}", ex.Message);
                return 1;
            }
        }
Здравствуйте, AlexRK, Вы писали:

M>>В итоге, любой функции, даже написанной через три месяца другим человеком четырьмя уровнями выше, рпидется столкнуться с тем, что возвращается не нужное значение, а никому не нужная обертка Result<список любых типов любой сложности, внутренности или вложенности>?

ARK>Ну так пусть функция возвращает нужное значение, в чем проблема? Ах, внутри файл читается? Тогда будьте добры отреагировать на потенциальный сбой.
ARK>Не хотите? Используйте другие языки, никто не против.
ARK>Лично мне нравится подход Rust/Swift.
Как минимум, проблема в том, что код который может бросить исключение или ошибку — может вызываться косвенно, и что именно это будет за код — заранее не известно.
При чём обработка ошибки — не ответственность вызывающего кода.
Однако, не забудь, что разработчик того самого кода, который вызывается косвенно, не только тебя не знает, но даже и не догадывается.

        static int Main(string[] args)
        {
            var fileNames = new string[] { "header.js", "library.core.js",  "library.ext.js", "footer.js" };
            try
            {
                var content = fileNames
                    .Select(x => "// " + x + "\n" + File.ReadAllText(x) + "\n") // лямбда - тот самый код
                    .Aggregate((current, next) => current + next);
                return 0;
            }
            catch (Exception ex) // а тут нам вообще пофиг, что упало, но должно быть записано в лог, да ещё со стек-трейсом, что бы было понятно, кто виноват
            {
                Console.WriteLine("Error! {0}", ex.Message);
                return 1;
            }
        }