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] Thinking functionally #1

Merged
merged 61 commits into from
Aug 29, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
0f524fe
Перенес перевод "Thinking functionally" в проект.
Feb 5, 2018
a271d4d
Добавил поправки FoggyFinder-а к утру 06.02.2018.
Feb 6, 2018
b16d484
Edited till 134th line
AnnaUdovichenko Feb 12, 2018
700c998
Edited till the end
AnnaUdovichenko Feb 13, 2018
b4121e3
Внес правки FoggyFinder-а одобренные к утру 14.02.2018.
Feb 14, 2018
13dcb4e
Minor fixes according to the comments
AnnaUdovichenko Feb 14, 2018
d933f19
Merge pull request #1 from AnnaUdovichenko/thinking-functionally
kleidemos Feb 14, 2018
a7554f4
Edited partial application
AnnaUdovichenko Feb 14, 2018
9ad7a4b
Edited according to comments
AnnaUdovichenko Feb 15, 2018
0426203
Small edits according to comments
AnnaUdovichenko Feb 16, 2018
7dfd592
Merge pull request #2 from AnnaUdovichenko/thinking-functionally
kleidemos Feb 16, 2018
6112050
исправление опечаток
FoggyFinder Feb 16, 2018
a716742
Merge pull request #3 from FoggyFinder/thinking-functionally
kleidemos Feb 17, 2018
7afa3bd
Some textual fixes for thinking-functional-intro
ForNeVeR Feb 27, 2018
6644125
Merge pull request #4 from fsharplang-ru/fornever/thinking-functional…
kleidemos Mar 10, 2018
cb04b30
fix typos 1
FoggyFinder Mar 26, 2018
e65bd0e
fix typos 2
FoggyFinder Mar 27, 2018
9e649f0
fix typos 3
FoggyFinder Mar 29, 2018
43e77c8
Merge pull request #5 from FoggyFinder/thinking-functionally
kleidemos Apr 4, 2018
fa476fc
Update mathematical-functions.md
Neftedollar May 10, 2018
34cb9da
Update mathematical-functions.md
Neftedollar May 10, 2018
b99dedc
исправил опечатку
Neftedollar May 10, 2018
c64ddbd
Добаил связности
Neftedollar May 10, 2018
5fec9cb
Update mathematical-functions.md
azheleznov88 May 11, 2018
662d7cd
Update thinking-functionally-intro.md
azheleznov88 May 11, 2018
3e1d936
Merge pull request #6 from azheleznov88/patch-2
kleidemos May 13, 2018
f30a08e
Merge pull request #7 from azheleznov88/patch-1
kleidemos May 13, 2018
cc2879b
Некоторые стилистически изменения
Neftedollar Jul 19, 2018
363f970
Update how-types-work-with-functions.md
Neftedollar Sep 10, 2018
204f205
Внёс бесспорную часть правок vshapenko..
Sep 16, 2018
784ce23
Update currying.md
Neftedollar Nov 10, 2018
6947461
Update currying.md
Neftedollar Nov 10, 2018
02e4153
минорные исправления
Neftedollar Nov 27, 2018
241ac4f
Update function-composition.md
Neftedollar Dec 5, 2018
c8e11ee
Update defining-functions.md
Neftedollar Dec 12, 2018
dbb732b
fixes
Szer Jan 21, 2019
99ba56b
for a few fixes more
Szer Jan 21, 2019
47b1a43
Добавил перевод комментариев и пару правок.
kleidemos Jan 31, 2019
c0b0486
Выпилил мерзкие сигнатурсссы %i.
kleidemos Jan 31, 2019
762a5a2
Пара правок
Szer Jan 31, 2019
3a0fa87
орфография
Szer Jan 31, 2019
fd0dca3
Merge pull request #8 from Szer/thinking-functionally
kleidemos Feb 1, 2019
6aa31e2
Edited until line 283
AnnaUdovichenko Feb 11, 2019
5ce1fee
edited to the end
AnnaUdovichenko Feb 13, 2019
9ba1506
Fixed according to the review
AnnaUdovichenko Feb 14, 2019
1b2bb2b
Разобрался со спорными моментами.
kleidemos Feb 15, 2019
0290fcb
Еще один сложный случай (забыл).
kleidemos Feb 15, 2019
5f41f1e
Исправил опечатку.
kleidemos Feb 16, 2019
796b81e
Merge pull request #9 from AnnaUdovichenko/thinking-functionally
kleidemos Feb 16, 2019
0e453fc
edit type-extensions.md until line 313
AnnaUdovichenko Feb 18, 2019
f149d05
Edited type-extensions.md untill line 486
AnnaUdovichenko Feb 21, 2019
75dcba4
edited type-extensions.md till the end
AnnaUdovichenko Feb 25, 2019
b188556
Update posts/type-extensions.md
DonnieKiel Feb 27, 2019
1856304
edited type-extensions.md according to the review
AnnaUdovichenko Feb 28, 2019
54a8474
Resolve conflict
AnnaUdovichenko Feb 28, 2019
a33c60e
Merge pull request #10 from AnnaUdovichenko/thinking-functionally
kleidemos Feb 28, 2019
0f51125
Edited stack-based-calculator.md until line 357
AnnaUdovichenko Mar 13, 2019
54240c2
Editet stack-based-calculator.md till the end
AnnaUdovichenko Mar 14, 2019
b75fb1e
Update stack-based-calculator.md
Neftedollar Apr 5, 2019
202ead9
Merge pull request #1 from Neftedollar/patch-1
AnnaUdovichenko Apr 5, 2019
04bfbbd
Merge pull request #11 from AnnaUdovichenko/thinking-functionally
kleidemos Apr 5, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ _book
# eBook build output
*.epub
*.mobi
*.pdf
*.pdf
/.vs
368 changes: 230 additions & 138 deletions posts/currying.md

Large diffs are not rendered by default.

500 changes: 332 additions & 168 deletions posts/defining-functions.md

Large diffs are not rendered by default.

216 changes: 153 additions & 63 deletions posts/function-composition.md

Large diffs are not rendered by default.

119 changes: 76 additions & 43 deletions posts/function-signatures.md

Large diffs are not rendered by default.

177 changes: 128 additions & 49 deletions posts/function-values-and-simple-values.md

Large diffs are not rendered by default.

378 changes: 265 additions & 113 deletions posts/how-types-work-with-functions.md

Large diffs are not rendered by default.

183 changes: 131 additions & 52 deletions posts/mathematical-functions.md

Large diffs are not rendered by default.

529 changes: 332 additions & 197 deletions posts/organizing-functions.md

Large diffs are not rendered by default.

288 changes: 181 additions & 107 deletions posts/partial-application.md

Large diffs are not rendered by default.

499 changes: 336 additions & 163 deletions posts/stack-based-calculator.md

Large diffs are not rendered by default.

43 changes: 30 additions & 13 deletions posts/thinking-functionally-intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,38 @@ seriesId: "Thinking functionally"
seriesOrder: 1
---

Now that you have seen some of the power of F# in the ["why use F#"](../series/why-use-fsharp.md) series, we're going to step back and look at the fundamentals of functional programming -- what does it really mean to "program functionally", and how this approach is different from object oriented or imperative programming.
> Now that you have seen some of the power of F# in the ["why use F#"](../series/why-use-fsharp.md) series, we're going to step back and look at the fundamentals of functional programming -- what does it really mean to "program functionally", and how this approach is different from object oriented or imperative programming.

### Changing the way you think ###
Теперь, когда читатель увидел некоторые из причин, по которым стоит использовать F#, в серии ["why use F#"](../series/why-use-fsharp.md), сделаем шаг назад и обсудим основы функционального программирования. Что в действительности означает "программировать функционально", и чем этот подход отличается от объектно-ориентированного или императивного программирования?

It is important to understand that functional programming is not just a stylistic difference; it is a completely different way of thinking about programming, in the way that truly object-oriented programming (in Smalltalk say) is also a different way of thinking from a traditional imperative language such as C.
### Changing the way you think | Смена образа мышления ###

F# does allow non-functional styles, and it is tempting to retain the habits you already are familiar with. You could just use F# in a non-functional way without really changing your mindset, and not realize what you are missing. To get the most out of F#, and to be fluent and comfortable with functional programming in general, it is critical that you think functionally, not imperatively.
And that is the goal of this series: to help you understand functional programming in a deep way, and help to change the way you think.
> It is important to understand that functional programming is not just a stylistic difference; it is a completely different way of thinking about programming, in the way that truly object-oriented programming (in Smalltalk say) is also a different way of thinking from a traditional imperative language such as C.

This will be a quite abstract series, although I will use lots of short code examples to demonstrate the points. We will cover the following points:
Важно понимать, что функциональное программирование - это не просто отдельный стиль программирования. Это совсем другой способ мышления в программировании, который отличается от "традиционного" подхода так же значительно, как настоящее ООП (в стиле Smalltalk) отличается от традиционного императивного языка - такого, как C.

* **Mathematical functions**. The first post introduces the mathematical ideas behind functional languages, and the benefits that come from this approach.
* **Functions and values**. The next post introduces functions and values, showing how "values" are different from variables, and why there are similarities between function and simple values.
* **Types**. Then we move on to the basic types that work with functions: primitive types such as string and int; the unit type, function types, and generic types.
* **Functions with multiple parameters**. Next, I explain the concepts of "currying" and "partial application". This is where your brain can start to hurt, if you are coming from an imperative background!
* **Defining functions**. Then some posts devoted to the many different ways to define and combine functions.
* **Function signatures**. Then a important post on the critical topic of function signatures: what they mean and how to use them as an aid to understanding.
* **Organizing functions**. Once you know how to create functions, how can you organize them to make them available to the rest of your code?
> F# does allow non-functional styles, and it is tempting to retain the habits you already are familiar with. You could just use F# in a non-functional way without really changing your mindset, and not realize what you are missing. To get the most out of F#, and to be fluent and comfortable with functional programming in general, it is critical that you think functionally, not imperatively.
> And that is the goal of this series: to help you understand functional programming in a deep way, and help to change the way you think.

F# позволяет использовать нефункциональные стили кодирования, и это искушает программиста сохранить его существующие привычки. На F# вы можете программировать так, как привыкли, не меняя радикально мировоззрения, и даже не представляя, что при этом упускаете. Однако, чтобы получить от F# максимальную отдачу, а также научиться уверенно программировать в функциональном стиле вообще, очень важно научиться мыслить функционально, а не императивно.
Copy link
Member

Choose a reason for hiding this comment

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

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

слова "кодирования". "программиста", "его", "существующие" кажутся избыточными.

к тому же, возможно лучше избавиться от "и это" заменив его на что

"F# позволяет использовать нефункциональные стили что искушает сохранить существующие привычки."
и это искушает сохранить существующие привычки."

Copy link
Member

Choose a reason for hiding this comment

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

В прошлый раз

На F# вы можете программировать так, как привыкли, не меняя радикально мировоззрения, и даже не представляя, что при этом упускаете.

"Вы можете просто использовать F# привычным образом без реального изменения мировоззрения и даже не представлять, что вы теряете."

чтобы убрать тавтологию можно вычеркнуть "привычным образом " смысл останется тем же.

Copy link
Member Author

Choose a reason for hiding this comment

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

// Мы этот абзац уже который раз правим

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 Author

Choose a reason for hiding this comment

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

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


> This will be a quite abstract series, although I will use lots of short code examples to demonstrate the points. We will cover the following points:

Это будет довольно абстрактная серия, хотя я буду использовать множество коротких примеров кода для демонстрации некоторых моментов. Мы рассмотрим следующие темы:
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 Author

Choose a reason for hiding this comment

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

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


> * **Mathematical functions**. The first post introduces the mathematical ideas behind functional languages, and the benefits that come from this approach.
> * **Functions and values**. The next post introduces functions and values, showing how "values" are different from variables, and why there are similarities between function and simple values.
> * **Types**. Then we move on to the basic types that work with functions: primitive types such as string and int; the unit type, function types, and generic types.
> * **Functions with multiple parameters**. Next, I explain the concepts of "currying" and "partial application". This is where your brain can start to hurt, if you are coming from an imperative background!
> * **Defining functions**. Then some posts devoted to the many different ways to define and combine functions.
> * **Function signatures**. Then a important post on the critical topic of function signatures: what they mean and how to use them as an aid to understanding.
> * **Organizing functions**. Once you know how to create functions, how can you organize them to make them available to the rest of your code?

* **Математические функции**. Первая статья знакомит с математическими представлениями, лежащими в основе функциональных языков и преимуществами, которые приносит данный подход.
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 Author

Choose a reason for hiding this comment

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

Согласен, несколькими предложениями позже я перехожу в будущее время.

* **Функции и значения**. Следующая знакомит с функциями и значениями, объясняет чем "значения" отличаются от переменных, и какие есть сходства между функциями и простыми значениями.
* **Типы**. Затем мы перейдем к основным типам, которые работают с функциями: примитивные типы, такие как string и int, тип unit, функциональные типы, и обобщённые типы (generic).
* **Функции с несколькими параметрами**. Далее я объясню понятия "каррирования" и "частичного применения". В этом месте чьим-то мозгам будет больно, особенно если у этих мозгов только императивное прошлое.
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 Author

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
Member Author

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.

не помню //cc @ForNeVeR
имеет смысл создать (временный ?) ишшуй с оговоренными переводами часто используемых слов если такого еще нет

Copy link
Member Author

Choose a reason for hiding this comment

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

Да нам вообще нужно лучше руководство переводчика писать.

* **Сигнатуры функций**. Далее будет важный пост о критическом значении сигнатур функций, что они значат, и как использовать сигнатуры для понимания содержимого функций.
Copy link
Member

@FoggyFinder FoggyFinder Apr 4, 2018

Choose a reason for hiding this comment

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

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

Наверное нужно как-то убрать тавтологию

Copy link
Member Author

Choose a reason for hiding this comment

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

Тут 2 (или 3) существительных к которым можно отнести местоимения в случае такой замены, мне пока не пришло в голову, как их заменить без создания неопределенности.

* **Организация функций**. Когда станет понятно, как создавать функции, возникнет вопрос: как можно их организовать, чтобы сделать доступными для остальной части кода?
Copy link
Member

@FoggyFinder FoggyFinder Apr 4, 2018

Choose a reason for hiding this comment

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

Когда станет понятно, как создавать функции, возникнет вопрос: как можно их организовать, чтобы сделать доступными для остальной части кода?

возможно без "можно" было бы лучше

Loading