-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[WIP] FsharpForFunAndProfit (GitBook): "Why use F#?" series #29
base: master
Are you sure you want to change the base?
Conversation
Также добавлены ресурсы (картинки :3) из оригинальных исходников.
Спорные варианты перевода через "/" написал. Также там ещё в паре мест вопросами обозначил фразы, текущий перевод которых меня очень смущает. |
Также ещё сделал несколько небольших исправлений
@ArtemyB может лучше делать два коммита (в оригинале и перевод)? так читать будет проще |
@FoggyFinder типа закоммитить в самом начале не переведённую статью, а затем делать коммиты по мере её перевода? Чтобы оригинальный и переведённый текст в diff сравнивать? Я правильно понял? |
@ArtemyB да, все верно |
@FoggyFinder ну тогда хорошая идея, да. Как-то самому на ум не приходило. Учту, спасибо. 👍 Переведённую статью уже, наверное, не буду в таком ключе переделывать. Но с новыми поступлю согласно рекомендации. Так нормально будет? |
6f17689
to
ce4e393
Compare
|
||
## ![](../assets/img/glyphicons/glyphicons_343_thumbs_up.png) Удобство (Convenience) | ||
|
||
Многие общие задачи программирования решаются гораздо проще с использованием F#. Среди них такие, как создание и использование [сложных объявлений типов](../posts/conciseness-type-definitions.md), [обработка списков](../posts/conciseness-extracting-boilerplate.md), [(?) сравнение и эквивалентность (?)](../posts/convenience-types.md), [конечные автоматы/машины состояний](../posts/designing-with-types-representing-states.md) и многое другое. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
По обоим вопросам – ок, перевод годится.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Лучше "конечные автоматы", чем "машины состояний", так ведь? (Собственно, не помню, чтобы 2-й вариант где-то в литературе встречал.)
let result = add2times3 5 | ||
``` | ||
|
||
## ![](../assets/img/glyphicons/glyphicons_150_check.png) Правильность/корректность/безошибочность (Correctness) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
«Корректность».
|
||
## ![](../assets/img/glyphicons/glyphicons_150_check.png) Правильность/корректность/безошибочность (Correctness) | ||
|
||
F# имеет [мощную систему типов](../posts/correctness-type-checking.md), которая препятствует возникновению многих распространённых шибок, таких как [null-исключения](../posts/the-option-type.md#option-is-not-null). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
«шибок» → «ошибок»
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да, вот на предмет подобных ошибок тоже хорошо проверять. А то в процессе перевода очень легко не заметить
Значения [по умолчанию неизменяемы](../posts/correctness-immutability.md), что предупреждает большое множество ошибок. | ||
> Values are [immutable by default](../posts/correctness-immutability.md), which prevents a large class of errors. | ||
|
||
В дополнение к вышеописанному, вы часто можете описать бизнес-логику, используя [систему типов](../posts/correctness-exhaustive-pattern-matching.md) таким образом, чтобы было буквально [невозможно написать ошибочный/некорректный код](../posts/designing-for-correctness.md), а то и по возможности использовать механизм [единиц измерений](../posts/units-of-measure.md), таким образом заметно уменьшив необходимость в модульных тестах (юнит-тестах). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
«некорректный»
let newString = str + " new!" | ||
newString | ||
|
||
// описывайте бизнес-логику в типах/представляйте бизнес-логику в типах (embed business logic into types) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
«бизнес-логика [элементы бизнес-логики?] может быть описана с помощью [системы] типов»?
(если честно, пример я не понял)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да, странный пример. По-хорошему, неплохо было бы все эти статьи дополнить, что ли. Ну и в некоторых местах обновить. А то, пожалуй, некоторые преимущества перед C# на данный момент уже не так выделяются, как раньше (ввиду появления в C# новых фич).
Для F# существует ряд встроенных библиотек для решения задач, в которых необходимо реализовать одновременное выполнение нескольких действий. | ||
> F# has a number of built-in libraries to help when more than one thing at a time is happening. | ||
|
||
[И асинхронность, и параллелизм](../posts/concurrency-async-and-parallel.md) реализовать очень просто/очень просты в реализации. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Оба варианта довольно хороши, давайте оставим второй.
[И асинхронность, и параллелизм](../posts/concurrency-async-and-parallel.md) реализовать очень просто/очень просты в реализации. | ||
> Asynchronous programming is [very easy](../posts/concurrency-async-and-parallel.md), as is parallelism. | ||
|
||
F# также имеет встроенную [модель актёров/акторов](../posts/concurrency-actor-model.md), отличную поддержку обработки событий и и [функционального реактивного программирования](../posts/concurrency-reactive.md). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Кажется, более распространён перевод «акторы».
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Наверное. По крайней мере, в Википедии такой используется, да.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
В принципе, можно так и оставить оба варианта, через слэш или в скобках. Чтобы всех устраивало. 😄
> F# also has a built-in [actor model](../posts/concurrency-actor-model.md), and excellent support for event handling | ||
and [functional reactive programming](../posts/concurrency-reactive.md). | ||
|
||
И, конечно же, благодаря неизменямым по умолчанию структурам данных, разделять состояне и избегать блокировок гораздо проще. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
«состояне» → «состояние»
В частности, F# разрабатывался как гибридный функциональный/объектно-ориентированный язык, в результате чего он позволяет делать [практически всё то же самое, что и C#](../posts/completeness-anything-csharp-can-do.md). | ||
> In particular, F# is designed as a hybrid functional/OO language, so it can do [virtually everything that C# can do](../posts/completeness-anything-csharp-can-do.md). | ||
|
||
И конечно же, F# -- [_часть/представитель_ экосистемы .NET](../posts/completeness-seamless-dotnet-interop.md), что предоставляет Вам беспрепятственный доступ ко всем сторонним .NET-библиотекам и инструментам. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Обычно я в таких случаях пишу «полноправный представитель».
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
О, хороший вариант, спасибо
В частности, F# разрабатывался как гибридный функциональный/объектно-ориентированный язык, в результате чего он позволяет делать [практически всё то же самое, что и C#](../posts/completeness-anything-csharp-can-do.md). | ||
> In particular, F# is designed as a hybrid functional/OO language, so it can do [virtually everything that C# can do](../posts/completeness-anything-csharp-can-do.md). | ||
|
||
И конечно же, F# -- [_часть/представитель_ экосистемы .NET](../posts/completeness-seamless-dotnet-interop.md), что предоставляет Вам беспрепятственный доступ ко всем сторонним .NET-библиотекам и инструментам. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
«Вам» тут нужно написать с маленькой буквы (для консистентности с остальным текстом).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да, согласен. Это я, похоже, только в начале так написал, а потом передумал и забыл исправить. Тем более в данном случае оно не очень уместно, если судить по тому, как оно в большинстве случаев употребляется. С большой буквы на сегодняшний день в каких-нибудь личных обращениях пишется, как мне видится.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Перевод очень хорошего качества, замечания у меня в основном по мелочам и по выбору вариантов перевода фраз.
Предлагаю этот PR как-то перебазировать в репозиторий fsharpforfunandprofit.gitbook. И я бы даже первые три статьи смержил, наверное (после внесения правок).
Он работает/запускается на большинстве платформах, включая Linux и мобильные платформы (_с помощью/через_ Mono и новый .NET Core). | ||
> It runs on most platforms, including Linux and smart phones (via Mono and the new .NET Core). | ||
|
||
В конечном счёте, он хорошо интегрирован с Visual Studio (Windows) и Xamarin (Mac), а значит, вы можете использовать _отличную/качественную/полноценную_ IDE с поддержкой IntelliSense, отладчиком, а также множеством расширений для модульного тестирования (юнит-тестов), контроля версий и прочих задач процесса разработки. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Предлагаю выбрать вариант «полноценную».
// "нечистый" код, если он нужен (impure code when needed) | ||
let mutable counter = 0 | ||
|
||
// создавайте C#-совместимые классы и интерфейсы (create C# compatible classes and interfaces) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Возможно, вместо «создавайте» написать «есть возможность создать»?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ну да, можно. Просто, как я понял, тут все комментарии в таком стиле (как в какой-нибудь рекламе 😄 )
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Как вариант:
можно создавать совместимые с C# классы и интерфейсы
* [Сравнение F# и C#: Просто суммирование](../posts/fvsc-sum-of-squares.md). Здесь мы пробуем просуммировать квадраты чисел от 1 до N без использования цикла. | ||
* [Сравнение F# и C#: Сортировка](../posts/fvsc-quicksort.md). Здесь мы увидим, что F# более декларативный, чем C#, а также познакомимся с механизом сопоставления с образцом (pattern matching). | ||
* [Сравнение F# и C#: Загрузка веб-страницы](../posts/fvsc-download.md). Здесь мы увидим, что F# превосходит в работе с обратными вызовами, а также познакомимся с ключевым словом "use". | ||
* [Четрые ключевых понятия](../posts/key-concepts.md). Понятия, отличающие F# от _стандартного/типичного_ императивного языка. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
«типичного»
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да, так естественнее кажется
* [Сравнение F# и C#: Просто суммирование](../posts/fvsc-sum-of-squares.md). Здесь мы пробуем просуммировать квадраты чисел от 1 до N без использования цикла. | ||
* [Сравнение F# и C#: Сортировка](../posts/fvsc-quicksort.md). Здесь мы увидим, что F# более декларативный, чем C#, а также познакомимся с механизом сопоставления с образцом (pattern matching). | ||
* [Сравнение F# и C#: Загрузка веб-страницы](../posts/fvsc-download.md). Здесь мы увидим, что F# превосходит в работе с обратными вызовами, а также познакомимся с ключевым словом "use". | ||
* [Четрые ключевых понятия](../posts/key-concepts.md). Понятия, отличающие F# от _стандартного/типичного_ императивного языка. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
«Четрые» → «Четыре»
* [Сопоставление с образцом _для/ради_ краткости](../posts/conciseness-pattern-matching.md). Сопоставление с образцом позволяет находить и связывать в одно действие. | ||
* [Удобство](../posts/convenience-intro.md). Возможности, сокращающие рутинное программирование и шаблонный код. | ||
* [Поведение типов "из коробки"](../posts/convenience-types.md). Неизменяемость и встроенная эквивалентность без кодирования. | ||
* [Функции как интерфейсы](../posts/convenience-functions-as-interfaces.md). Шаблоны проектирования ООП могут оказатсья тривиальными, _если использовать функции_/_когда в дело идут функции_. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
«оказатсья» → «оказаться»
seriesId: "Зачем использовать F#?" | ||
seriesOrder: 2 | ||
--- | ||
Вот очень быстрый обзор того, как читать F#-код, для незнакомых с синтаксисом данного языка. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
«быстрый» → «краткий»?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
«Вот» → «ниже приведён»?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Согласен в обоих случаях
|
||
Некоторые находят синтаксис F# отталкивающим. Если вы один из них, то специально для вас привожу цитату: | ||
|
||
>"Улучшать свою нотацию таким образом, чтобы не (смущать/приводить в замешательство) людей в первые 10 минут её чтения, но при этом способствовать ухудшению читаемости (после/потом/позже), есть очень плохая ошибка." |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Предлагаю перефразировать так:
"Оптимизация нотации языка программирования для того, чтобы не смущать человека, который впервые увидел язык 10 минут назад, жертвуя читаемостью для всех остальных - это большая ошибка."
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ну да, вариант. Только надо бы ещё слов поменьше, а то, как по мне, немного запутывает такое длинное сложноподчинённое предложение. Возможно, как-то то так, например:
Корректировать нотацию языка программирования с целью не смущать человека, увидевшего язык 10 минут назад, при этом жертвуя читаемостью для всех остальных -- большая ошибка.
Но всё равно что-то не то ещё. 😅
многострочные комментарии помещаются между двумя скобками такого вида: (* . . . *) | ||
*) | ||
|
||
// ======== "Переменные" (но на самом деле не переменные)" ====== |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут лишняя кавычка в конце строки.
evens oneToFive // А теперь выполним функцию. | ||
|
||
// Вы можете использовать круглые скобки для уточнения | ||
// (приоритета/последовательности)применения параметров. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
«последовательности»
Если нужна помощь с переносом PR — скажите, я помогу. |
- Исходный (английский) текст оставлен в Markdown-цитатах
- Исходный (англ.) текст оставлен в цитатах под блоками русского текста
@ForNeVeR да, перенести статьи в репозиторий c GitBook не проблема. Я же оттуда точь в точь и скопировал файлы, даже структуру папок сохранил. Только там надо разобраться, как правильно потом русскоязычную версию с основной смержить. По идее, там папки под каждый язык нужны или что-то вроде того -- детально не разбирался. В самом переносе работы мало. Позже сам сделаю. Сейчас, вроде, не критично. Тем более я всё равно буду придерживаться установленной структуры, так что особенной разницы, когда переносить, нет, как мне кажется. |
…ужна проверка - Исходный (англ.) текст оставлен в цитатах под блоками русского текста
- Исходный (англ.) текст оставлен в цитатах под блоками русского текста
За основу взял GitBook (исходники). Начал со вступления c содержанием ("Why use F#" in one page). Пока после каждого предложение оставил оригинальный английский вариант, чтобы проверить проще было. В конечном варианте удалится, естественно (могу и сейчас, если нужно).
Сюда же в репозиторий для удобства поместил и все исходники оригинала, относящиеся к данной серии. Структуру исходников в переводе пока сделал такую же, как и в оригинале, чтобы не заморачиваться с корректировкой гиперссылок (не знаю, насколько они нужны: в оригинале GitBook они есть, а на сайте -- нет).
P.S. Гиперссылки в переводе пока нерабочие, т.к. файлов, на которые они ссылаются, ещё нет.
Ниже перечислен список всех статей в этом цикле (м.б. потом ссылочки добавлю -- пока лень 😅):