Skip to content
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

Open
wants to merge 17 commits into
base: master
Choose a base branch
from

Conversation

ArtemyB
Copy link

@ArtemyB ArtemyB commented Oct 10, 2017

За основу взял GitBook (исходники). Начал со вступления c содержанием ("Why use F#" in one page). Пока после каждого предложение оставил оригинальный английский вариант, чтобы проверить проще было. В конечном варианте удалится, естественно (могу и сейчас, если нужно).

Сюда же в репозиторий для удобства поместил и все исходники оригинала, относящиеся к данной серии. Структуру исходников в переводе пока сделал такую же, как и в оригинале, чтобы не заморачиваться с корректировкой гиперссылок (не знаю, насколько они нужны: в оригинале GitBook они есть, а на сайте -- нет).
P.S. Гиперссылки в переводе пока нерабочие, т.к. файлов, на которые они ссылаются, ещё нет.

Ниже перечислен список всех статей в этом цикле (м.б. потом ссылочки добавлю -- пока лень 😅):

  • "Why use F#?" in one page (нужно проверить и подкорректировать)
  • Introduction to the 'Why use F#' series
  • F# syntax in 60 seconds
  • Comparing F# with C#: A simple sum
  • Comparing F# with C#: Sorting
  • Comparing F# with C#: Downloading a web page
  • Four Key Concepts
  • Conciseness
  • Type inference
  • Low overhead type definitions
  • Using functions to extract boilerplate code
  • Using functions as building blocks
  • Pattern matching for conciseness
  • Convenience
  • Out-of-the-box behavior for types
  • Functions as interfaces
  • Partial Application
  • Active patterns
  • Correctness
  • Immutability
  • Exhaustive pattern matching
  • Using the type system to ensure correct code
  • Worked example: Designing for correctness
  • Concurrency
  • Asynchronous programming. Encapsulating a background task with the Async class
  • Messages and Agents
  • Functional Reactive Programming
  • Completeness
  • Seamless interoperation with .NET libraries
  • Anything C# can do...
  • Why use F#: Conclusion

@ArtemyB
Copy link
Author

ArtemyB commented Oct 10, 2017

Спорные варианты перевода через "/" написал. Также там ещё в паре мест вопросами обозначил фразы, текущий перевод которых меня очень смущает.

@FoggyFinder
Copy link
Member

@ArtemyB может лучше делать два коммита (в оригинале и перевод)? так читать будет проще

@ArtemyB
Copy link
Author

ArtemyB commented Oct 12, 2017

@FoggyFinder типа закоммитить в самом начале не переведённую статью, а затем делать коммиты по мере её перевода? Чтобы оригинальный и переведённый текст в diff сравнивать? Я правильно понял?

@FoggyFinder
Copy link
Member

@ArtemyB да, все верно

@ArtemyB
Copy link
Author

ArtemyB commented Oct 12, 2017

@FoggyFinder ну тогда хорошая идея, да. Как-то самому на ум не приходило. Учту, спасибо. 👍 Переведённую статью уже, наверное, не буду в таком ключе переделывать. Но с новыми поступлю согласно рекомендации. Так нормально будет?


## ![](../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) и многое другое.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

По обоим вопросам – ок, перевод годится.

Copy link
Author

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)
Copy link
Member

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).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

«шибок» → «ошибок»

Copy link
Author

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), таким образом заметно уменьшив необходимость в модульных тестах (юнит-тестах).
Copy link
Member

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)
Copy link
Member

@ForNeVeR ForNeVeR Mar 17, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

«бизнес-логика [элементы бизнес-логики?] может быть описана с помощью [системы] типов»?
(если честно, пример я не понял)

Copy link
Author

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) реализовать очень просто/очень просты в реализации.
Copy link
Member

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).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кажется, более распространён перевод «акторы».

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Наверное. По крайней мере, в Википедии такой используется, да.

Copy link
Author

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).

И, конечно же, благодаря неизменямым по умолчанию структурам данных, разделять состояне и избегать блокировок гораздо проще.
Copy link
Member

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-библиотекам и инструментам.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Обычно я в таких случаях пишу «полноправный представитель».

Copy link
Author

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-библиотекам и инструментам.
Copy link
Member

@ForNeVeR ForNeVeR Mar 17, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

«Вам» тут нужно написать с маленькой буквы (для консистентности с остальным текстом).

Copy link
Author

@ArtemyB ArtemyB Apr 12, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, согласен. Это я, похоже, только в начале так написал, а потом передумал и забыл исправить. Тем более в данном случае оно не очень уместно, если судить по тому, как оно в большинстве случаев употребляется. С большой буквы на сегодняшний день в каких-нибудь личных обращениях пишется, как мне видится.

Copy link
Member

@ForNeVeR ForNeVeR left a 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, отладчиком, а также множеством расширений для модульного тестирования (юнит-тестов), контроля версий и прочих задач процесса разработки.
Copy link
Member

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)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Возможно, вместо «создавайте» написать «есть возможность создать»?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну да, можно. Просто, как я понял, тут все комментарии в таком стиле (как в какой-нибудь рекламе 😄 )

Copy link
Author

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# от _стандартного/типичного_ императивного языка.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

«типичного»

Copy link
Author

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# от _стандартного/типичного_ императивного языка.
Copy link
Member

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). Шаблоны проектирования ООП могут оказатсья тривиальными, _если использовать функции_/_когда в дело идут функции_.
Copy link
Member

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#-код, для незнакомых с синтаксисом данного языка.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

«быстрый» → «краткий»?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

«Вот» → «ниже приведён»?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Согласен в обоих случаях


Некоторые находят синтаксис F# отталкивающим. Если вы один из них, то специально для вас привожу цитату:

>"Улучшать свою нотацию таким образом, чтобы не (смущать/приводить в замешательство) людей в первые 10 минут её чтения, но при этом способствовать ухудшению читаемости (после/потом/позже), есть очень плохая ошибка."
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю перефразировать так:

"Оптимизация нотации языка программирования для того, чтобы не смущать человека, который впервые увидел язык 10 минут назад, жертвуя читаемостью для всех остальных - это большая ошибка."

Copy link
Author

@ArtemyB ArtemyB Apr 12, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну да, вариант. Только надо бы ещё слов поменьше, а то, как по мне, немного запутывает такое длинное сложноподчинённое предложение. Возможно, как-то то так, например:

Корректировать нотацию языка программирования с целью не смущать человека, увидевшего язык 10 минут назад, при этом жертвуя читаемостью для всех остальных -- большая ошибка.

Но всё равно что-то не то ещё. 😅

многострочные комментарии помещаются между двумя скобками такого вида: (* . . . *)
*)

// ======== "Переменные" (но на самом деле не переменные)" ======
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут лишняя кавычка в конце строки.

evens oneToFive // А теперь выполним функцию.

// Вы можете использовать круглые скобки для уточнения
// (приоритета/последовательности)применения параметров.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

«последовательности»

@ForNeVeR
Copy link
Member

Если нужна помощь с переносом PR — скажите, я помогу.

- Исходный (английский) текст оставлен в Markdown-цитатах
@ArtemyB
Copy link
Author

ArtemyB commented Apr 12, 2018

@ForNeVeR да, перенести статьи в репозиторий c GitBook не проблема. Я же оттуда точь в точь и скопировал файлы, даже структуру папок сохранил. Только там надо разобраться, как правильно потом русскоязычную версию с основной смержить. По идее, там папки под каждый язык нужны или что-то вроде того -- детально не разбирался.

В самом переносе работы мало. Позже сам сделаю. Сейчас, вроде, не критично. Тем более я всё равно буду придерживаться установленной структуры, так что особенной разницы, когда переносить, нет, как мне кажется.

…ужна проверка

- Исходный (англ.) текст оставлен в цитатах под блоками русского текста
- Исходный (англ.) текст оставлен в цитатах под блоками русского текста
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants