-
Notifications
You must be signed in to change notification settings - Fork 3
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
Changes from 29 commits
0f524fe
a271d4d
b16d484
700c998
b4121e3
13dcb4e
d933f19
a7554f4
9ad7a4b
0426203
7dfd592
6112050
a716742
7afa3bd
6644125
cb04b30
e65bd0e
9e649f0
43e77c8
fa476fc
34cb9da
b99dedc
c64ddbd
5fec9cb
662d7cd
3e1d936
f30a08e
cc2879b
363f970
204f205
784ce23
6947461
02e4153
241ac4f
c8e11ee
dbb732b
99ba56b
47b1a43
c0b0486
762a5a2
3a0fa87
fd0dca3
6aa31e2
5ce1fee
9ba1506
1b2bb2b
0290fcb
5f41f1e
796b81e
0e453fc
f149d05
75dcba4
b188556
1856304
54a8474
a33c60e
0f51125
54240c2
b75fb1e
202ead9
04bfbbd
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -13,4 +13,5 @@ _book | |
# eBook build output | ||
*.epub | ||
*.mobi | ||
/.vs |
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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# максимальную отдачу, а также научиться уверенно программировать в функциональном стиле вообще, очень важно научиться мыслить функционально, а не императивно. | ||
Цель данной серии - помочь читателю понять подоплёку функционального программирования и изменить его способ мышления. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 commentThe 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: | ||
|
||
Это будет довольно абстрактная серия, хотя я буду использовать множество коротких примеров кода для демонстрации некоторых моментов. Мы рассмотрим следующие темы: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 commentThe 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? | ||
|
||
* **Математические функции**. Первая статья знакомит с математическими представлениями, лежащими в основе функциональных языков и преимуществами, которые приносит данный подход. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 commentThe reason will be displayed to describe this comment to others. Learn more. Согласен, несколькими предложениями позже я перехожу в будущее время. |
||
* **Функции и значения**. Следующая знакомит с функциями и значениями, объясняет чем "значения" отличаются от переменных, и какие есть сходства между функциями и простыми значениями. | ||
* **Типы**. Затем мы перейдем к основным типам, которые работают с функциями: примитивные типы, такие как string и int, тип unit, функциональные типы, и обобщённые типы (generic). | ||
* **Функции с несколькими параметрами**. Далее я объясню понятия "каррирования" и "частичного применения". В этом месте чьим-то мозгам будет больно, особенно если у этих мозгов только императивное прошлое. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 commentThe 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 commentThe 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 commentThe 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 commentThe reason will be displayed to describe this comment to others. Learn more. не помню //cc @ForNeVeR There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 commentThe 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 commentThe reason will be displayed to describe this comment to others. Learn more. Тут 2 (или 3) существительных к которым можно отнести местоимения в случае такой замены, мне пока не пришло в голову, как их заменить без создания неопределенности. |
||
* **Организация функций**. Когда станет понятно, как создавать функции, возникнет вопрос: как можно их организовать, чтобы сделать доступными для остальной части кода? | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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# позволяет использовать нефункциональные стили что искушает сохранить существующие привычки."
и это искушает сохранить существующие привычки."
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# привычным образом без реального изменения мировоззрения и даже не представлять, что вы теряете."
чтобы убрать тавтологию можно вычеркнуть "привычным образом " смысл останется тем же.
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.
// Мы этот абзац уже который раз правим
Возможно перебор с облегчением.
По второму пункту не понял, что конкретно считается тавтологией? // Кстати, мы там уже приличный кусок исходника выпилили.