Tan115's picture
Add files using upload-large-folder tool
2e5dac7 verified
Raw
History Blame Contribute Delete
19.9 kB
1
00:00:06,000 --> 00:00:06,000
Hello.
2
00:00:06,000 --> 00:00:11,000
The students that they were going to start, important and very interesting topic, I'm talking about
3
00:00:11,000 --> 00:00:16,000
functional programming and this lesson, we are going to understand what functional programming is.
4
00:00:16,000 --> 00:00:21,000
Well, understand how it is different from object oriented approach after this lesson.
5
00:00:21,000 --> 00:00:24,000
And you know what the difference between method and function is?
6
00:00:24,000 --> 00:00:30,000
And only after we will understand the basics of functional programming, we will talk about functional
7
00:00:30,000 --> 00:00:31,000
programming in Java.
8
00:00:31,000 --> 00:00:37,000
We are going to review Jaberi till function package and understand its structure will not have enough
9
00:00:37,000 --> 00:00:40,000
time to learn all types from that package today.
10
00:00:40,000 --> 00:00:44,000
But you will understand the structure of the package and what it exists for.
11
00:00:44,000 --> 00:00:49,000
The things that we are going to learn in this class and will help us to boost our learning of functional
12
00:00:49,000 --> 00:00:50,000
programming in Java.
13
00:00:51,000 --> 00:00:55,000
Let's start and let's understand first what is a functional programming.
14
00:00:56,000 --> 00:01:02,000
Functional programming is a programming paradigm where programs are constructed by applying and composing
15
00:01:02,000 --> 00:01:04,000
functions in functional programming.
16
00:01:04,000 --> 00:01:10,000
Functions are treated like the main core element of each program, and they can be assigned to variables
17
00:01:10,000 --> 00:01:14,000
and can be returned from the Massett, the same as other data type.
18
00:01:14,000 --> 00:01:16,000
To understand functional programming better.
19
00:01:16,000 --> 00:01:20,000
Let's discuss concepts that are specific to functional programming.
20
00:01:20,000 --> 00:01:23,000
The first concept is a concept of first class function.
21
00:01:24,000 --> 00:01:30,000
Usually this term is applied to programming language that can treat functions as first class citizens.
22
00:01:30,000 --> 00:01:36,000
That means language supports and functions as an argument to other functions, return and functions
23
00:01:36,000 --> 00:01:40,000
from other functions as value and assign functions to variables.
24
00:01:41,000 --> 00:01:45,000
The next concept that is related to functional programming is pure functions.
25
00:01:46,000 --> 00:01:48,000
These are functions that have following properties.
26
00:01:49,000 --> 00:01:53,000
The first one, its evaluation has no side effects.
27
00:01:53,000 --> 00:01:59,000
That means the function doesn't modify some state variable values outside the function.
28
00:02:00,000 --> 00:02:05,000
And the second property is that original value of pure function is the same for the same arguments.
29
00:02:05,000 --> 00:02:09,000
That means, given the same input, will always return the same output.
30
00:02:10,000 --> 00:02:11,000
This can be used for code.
31
00:02:11,000 --> 00:02:15,000
Optimization, for example, is a result of pure function is not used.
32
00:02:16,000 --> 00:02:18,000
It can be removed without affecting other expressions.
33
00:02:19,000 --> 00:02:25,000
That also means that pure functions are completely independent from outside state and can be used in
34
00:02:25,000 --> 00:02:27,000
parallel or asynchronously.
35
00:02:28,000 --> 00:02:34,000
It is easy to move them around in your code, making your programs more flexible and adaptable to future
36
00:02:34,000 --> 00:02:34,000
changes.
37
00:02:35,000 --> 00:02:40,000
The third concept of functional programming is a recursion and functional programming.
38
00:02:40,000 --> 00:02:42,000
There is no for and while loops.
39
00:02:42,000 --> 00:02:48,000
But what is used instead calling the same function from another function is called recursion and can
40
00:02:48,000 --> 00:02:50,000
be used for iteration.
41
00:02:50,000 --> 00:02:55,000
The fourth concept is that functional programs do not have assignment statements.
42
00:02:56,000 --> 00:03:01,000
That means the value of a variable is immutable and doesn't change state once it was defined.
43
00:03:02,000 --> 00:03:04,000
This is called referential transparency.
44
00:03:05,000 --> 00:03:08,000
The next concept in our list is lazy evaluation.
45
00:03:08,000 --> 00:03:09,000
What does that mean?
46
00:03:10,000 --> 00:03:16,000
Each programming language has strategies to evaluate code blocks and when we call a function, programming
47
00:03:16,000 --> 00:03:19,000
language should define the strategy to produce arguments.
48
00:03:19,000 --> 00:03:22,000
There are two possible main evaluation methods.
49
00:03:22,000 --> 00:03:29,000
They are strict, sometimes called EGA evaluation and non strict so-called lazy evaluation.
50
00:03:29,000 --> 00:03:32,000
What is the difference in strict evaluation?
51
00:03:32,000 --> 00:03:38,000
Arguments are processed immediately when we invoke a function and give a list of arguments.
52
00:03:38,000 --> 00:03:45,000
Each argument is processed and calculated before colon's a function, whereas in lazy evaluation expression,
53
00:03:45,000 --> 00:03:47,000
evaluation is deferred.
54
00:03:47,000 --> 00:03:53,000
Evaluation is delayed as long as possible until it is necessary to evaluate the expression to produce
55
00:03:53,000 --> 00:03:53,000
a result.
56
00:03:54,000 --> 00:03:58,000
That's only five key concepts in different literature.
57
00:03:58,000 --> 00:04:03,000
You can find the different list of concepts or just different names for the same concepts that I have
58
00:04:03,000 --> 00:04:04,000
just described.
59
00:04:04,000 --> 00:04:09,000
I would say that the list of the current concepts is enough to understand the functional programming.
60
00:04:09,000 --> 00:04:15,000
What advantages and disadvantages functional programming has been through professionals.
61
00:04:15,000 --> 00:04:21,000
We have to understand advantages and disadvantages of functional programming approach the disadvantages
62
00:04:21,000 --> 00:04:26,000
advantages it is worth to mention that because of using pure functions that don't change any state and
63
00:04:26,000 --> 00:04:33,000
are entirely dependent on the input, they are simple to understand the simplicity of functional programming
64
00:04:33,000 --> 00:04:35,000
is one of the advantages that is mentioned.
65
00:04:35,000 --> 00:04:36,000
Most often.
66
00:04:37,000 --> 00:04:40,000
The testing is easier than the bargain is.
67
00:04:40,000 --> 00:04:42,000
Easier is it is the first advantage.
68
00:04:42,000 --> 00:04:49,000
The second advantage is that because of the pure functions, implementation of concurrency is much easier.
69
00:04:49,000 --> 00:04:54,000
We shouldn't worry about state being changed from the different threats of execution in parallel.
70
00:04:55,000 --> 00:05:00,000
To be honest, these are the biggest advantages you can Google advantages of functional programming
71
00:05:00,000 --> 00:05:02,000
if you wish, but all of them can.
72
00:05:02,000 --> 00:05:08,000
Be grouped in these two advantages that are listed, somebody would also mention that programs are more
73
00:05:08,000 --> 00:05:11,000
concise and more bulletproof.
74
00:05:11,000 --> 00:05:16,000
But I would rather said that this is associated with a simplicity that we have just discussed and the
75
00:05:16,000 --> 00:05:18,000
logical benefits of PUA functions.
76
00:05:19,000 --> 00:05:24,000
Somebody would also notice that absence of classes in functional programming makes the program code
77
00:05:24,000 --> 00:05:25,000
easy to read.
78
00:05:26,000 --> 00:05:31,000
But in my humble opinion, these advantages depend on the type of software you develop.
79
00:05:31,000 --> 00:05:36,000
While functional programming works great for simple programs and for beginner programmers, I would
80
00:05:36,000 --> 00:05:41,000
like to see how people who write articles that functional programming is the best.
81
00:05:41,000 --> 00:05:46,000
I would love to see how they would implement some complex enterprise solutions that requires the mind
82
00:05:46,000 --> 00:05:49,000
driven design and object oriented approach.
83
00:05:50,000 --> 00:05:52,000
And remember, team, we are professionals.
84
00:05:52,000 --> 00:05:58,000
That's why we don't say that functional programming or object oriented approach is better than something
85
00:05:58,000 --> 00:05:58,000
else.
86
00:05:58,000 --> 00:06:04,000
We just say that each approach works the best for specific cases and we need to know when to apply a
87
00:06:04,000 --> 00:06:06,000
different approach if needed.
88
00:06:06,000 --> 00:06:11,000
Talking about these advantages of functional programming, I'd like to mention a few items here.
89
00:06:12,000 --> 00:06:17,000
The first thing that you probably might think of is that in case all values are immutable and functions
90
00:06:17,000 --> 00:06:22,000
doesn't change state that would cause significant performance issues during the processing of a big
91
00:06:22,000 --> 00:06:27,000
amount of data because a lot of values will be created that are not used.
92
00:06:27,000 --> 00:06:31,000
That would also require a specific mechanism for memory management.
93
00:06:31,000 --> 00:06:37,000
The second disadvantage is partially we talked through imagine that huge online store with customer
94
00:06:37,000 --> 00:06:43,000
management, personalized promotions, specific rules for discount management, affiliate program,
95
00:06:43,000 --> 00:06:45,000
warehouse management, etc..
96
00:06:45,000 --> 00:06:49,000
Imagine that this kind of program is written with only functions.
97
00:06:49,000 --> 00:06:51,000
Would that really make code readable?
98
00:06:52,000 --> 00:06:55,000
Would that make the code easier to maintain and extend?
99
00:06:55,000 --> 00:07:01,000
Or onboarding of new engineer to the project will require a month or two for learning all functions
100
00:07:01,000 --> 00:07:02,000
that exist in the project.
101
00:07:03,000 --> 00:07:08,000
That's why among the disadvantages of functional programming sometimes mentioned that in particular
102
00:07:08,000 --> 00:07:13,000
cases, programs that are even with the help of only functions are hard to read.
103
00:07:14,000 --> 00:07:19,000
The third important disadvantage that is worth to mention is that while writing of pure functions might
104
00:07:19,000 --> 00:07:26,000
look easy, it is hard task to combine pure functions and make them work together to achieve some specific
105
00:07:26,000 --> 00:07:29,000
goal and integrate them with the rest of application.
106
00:07:30,000 --> 00:07:33,000
Now, you know, advantages and disadvantages of functional programming.
107
00:07:34,000 --> 00:07:37,000
Functional programming is a form of declarative programming.
108
00:07:37,000 --> 00:07:43,000
After you understood what a functional programming is, it will be easy for you to understand the definition
109
00:07:43,000 --> 00:07:44,000
of declarative programming.
110
00:07:45,000 --> 00:07:51,000
Declarative programming is a programming style of building the structure and elements of computer programs
111
00:07:51,000 --> 00:07:57,000
that express the logic of a computation without describing the order in which individual statements,
112
00:07:57,000 --> 00:08:01,000
instructions or function calls of program are executed or evaluated.
113
00:08:02,000 --> 00:08:08,000
Does it make sense now on the opposite of declarative programming, we have imperative programming in
114
00:08:08,000 --> 00:08:09,000
computer science.
115
00:08:09,000 --> 00:08:15,000
Imperative programming is a programming paradigm that uses statements that change a programs state.
116
00:08:15,000 --> 00:08:21,000
To make you understand imperative programming, I would like to use object oriented development approach
117
00:08:21,000 --> 00:08:21,000
as an example.
118
00:08:22,000 --> 00:08:27,000
We have objects that have state and masses to modify the state.
119
00:08:27,000 --> 00:08:33,000
Usually Java is considered to be an imperative programming language, and in Java we usually use term
120
00:08:33,000 --> 00:08:39,000
method instead of function to describe some specific block of code that can be executed.
121
00:08:39,000 --> 00:08:43,000
What is the difference between the function and method or this is the same?
122
00:08:44,000 --> 00:08:50,000
A function is a piece of code that is called by name and method is a piece of code that is called by
123
00:08:50,000 --> 00:08:53,000
name that is associated with an object.
124
00:08:53,000 --> 00:08:58,000
And I believe you can see that these two definitions are close, but not the same.
125
00:08:59,000 --> 00:09:01,000
There are two main points to consider here.
126
00:09:01,000 --> 00:09:05,000
The first one is that MassArt is called on the object.
127
00:09:05,000 --> 00:09:10,000
That's why Massager is considered to be closer to object oriented programming approach.
128
00:09:11,000 --> 00:09:15,000
Function can exist without any object and can be called independently.
129
00:09:16,000 --> 00:09:22,000
And the second point, the method is able to operate on data that describes the state of the object.
130
00:09:23,000 --> 00:09:26,000
Function works with arguments that are pastorate.
131
00:09:26,000 --> 00:09:27,000
Does it make sense?
132
00:09:28,000 --> 00:09:28,000
Help now?
133
00:09:28,000 --> 00:09:31,000
The difference between function and MassArt is clearer.
134
00:09:31,000 --> 00:09:34,000
Let's talk now about functional programming and Java.
135
00:09:35,000 --> 00:09:40,000
Functional programming was introduced in Java eight and I'd like to add more specifics here.
136
00:09:40,000 --> 00:09:43,000
In my opinion, it will sound correctly.
137
00:09:43,000 --> 00:09:47,000
It will say that functional like syntax was introduced in Java version eight.
138
00:09:48,000 --> 00:09:50,000
Java still remains imperative language.
139
00:09:51,000 --> 00:09:57,000
Java still uses object oriented approach, and even functional programming in Java is implemented in
140
00:09:57,000 --> 00:09:58,000
object oriented manner.
141
00:09:59,000 --> 00:10:00,000
That is really impressive.
142
00:10:01,000 --> 00:10:02,000
Java combines is.
143
00:10:02,000 --> 00:10:09,000
So declarant functions and it's pure object oriented style that deprives the Java feeling during the
144
00:10:09,000 --> 00:10:17,000
code in Java introduced syntax improvements, namely now we can use lambda expressions and methods references
145
00:10:17,000 --> 00:10:18,000
during the development.
146
00:10:19,000 --> 00:10:21,000
We're going to learn what is this?
147
00:10:21,000 --> 00:10:22,000
And a separate lesson.
148
00:10:22,000 --> 00:10:27,000
And we'll practice in writing our own lambda expressions and create references.
149
00:10:27,000 --> 00:10:33,000
Java also introduced new package with the language function that's called an overview of this package
150
00:10:33,000 --> 00:10:35,000
to understand what was introduced there.
151
00:10:36,000 --> 00:10:40,000
And here you can see official documentation of your function package.
152
00:10:40,000 --> 00:10:42,000
Why do we need it in this package?
153
00:10:42,000 --> 00:10:44,000
Functional interfaces are grouped.
154
00:10:45,000 --> 00:10:47,000
What are functional interfaces?
155
00:10:47,000 --> 00:10:54,000
In short, every interface that declares only one abstract method is a functional interface in our next
156
00:10:54,000 --> 00:10:54,000
lesson.
157
00:10:54,000 --> 00:10:58,000
So we are going to learn in detail what functional interfaces are.
158
00:10:58,000 --> 00:11:01,000
But for this lesson, it is enough to imagine interfaces.
159
00:11:01,000 --> 00:11:04,000
It always has only one abstract method.
160
00:11:04,000 --> 00:11:08,000
And when I will say functional interface, you will understand what I am talking about.
161
00:11:09,000 --> 00:11:14,000
The functional interfaces provide target types for lambda expressions and methods references.
162
00:11:14,000 --> 00:11:16,000
Let me explain this in simple words.
163
00:11:17,000 --> 00:11:23,000
This package group, all types that can be used during the declaring of lambda expressions and method
164
00:11:23,000 --> 00:11:30,000
references, all types in this package follow specific naming convention and this is specified here,
165
00:11:31,000 --> 00:11:35,000
will not learn this right now because in my opinion it is better to learn during the practice.
166
00:11:36,000 --> 00:11:39,000
You can see that this package was introduced in Java version eight.
167
00:11:40,000 --> 00:11:43,000
And here you can see a list of types that we are going to learn.
168
00:11:44,000 --> 00:11:47,000
Clear explanations written right here next to type name.
169
00:11:48,000 --> 00:11:52,000
I can leave the link to this documentation in attachments to the lesson and you would read it after
170
00:11:52,000 --> 00:11:53,000
the lesson.
171
00:11:53,000 --> 00:11:59,000
Don't try to understand everything because we are going to have lessons that will teach you how to work
172
00:11:59,000 --> 00:12:00,000
with types from this package.
173
00:12:01,000 --> 00:12:04,000
But you can try to understand why we need some types here.
174
00:12:04,000 --> 00:12:07,000
For example, here you can even see a function type.
175
00:12:08,000 --> 00:12:13,000
This type is developed to represent the function that accepts one argument and produces a result.
176
00:12:14,000 --> 00:12:19,000
While learning stream API will use some of these types to declare a lambda expressions.
177
00:12:19,000 --> 00:12:25,000
And now when you can see the whole list of types that allows us to create an object of these types,
178
00:12:25,000 --> 00:12:27,000
you can understand why.
179
00:12:27,000 --> 00:12:32,000
A few minutes ago I said that functional programming Java implemented with a feeling of object oriented
180
00:12:32,000 --> 00:12:33,000
paradigm.
181
00:12:34,000 --> 00:12:39,000
You can see that function is also a separate type and I can create an object of function type.
182
00:12:40,000 --> 00:12:45,000
I believe this information is more than enough to understand what functional programming is and what
183
00:12:45,000 --> 00:12:46,000
we are going to learn.
184
00:12:46,000 --> 00:12:51,000
Let's recap what we have learned today, that iminent what functional programming is.
185
00:12:51,000 --> 00:12:54,000
We discussed main concepts of functional programming.
186
00:12:54,000 --> 00:12:58,000
After that, we discussed advantages and disadvantages of functional programming.
187
00:12:59,000 --> 00:13:03,000
Also today, we learned what is imperative and declarative programming.
188
00:13:03,000 --> 00:13:07,000
We learned what the difference between the function and the method is.
189
00:13:08,000 --> 00:13:13,000
And at the end of the lesson, I told you what functional programming in Java is and hold an overview
190
00:13:13,000 --> 00:13:15,000
of Jabbawockeez function package.
191
00:13:16,000 --> 00:13:21,000
I believe now we have enough theoretical knowledge to practice our learning of functional programming
192
00:13:21,000 --> 00:13:21,000
in Java.
193
00:13:22,000 --> 00:13:25,000
That's all what I wanted to discuss with you during this lesson.
194
00:13:25,000 --> 00:13:26,000
Thanks a lot for your attention.
195
00:13:27,000 --> 00:13:28,000
See you in the next lesson.