Eloquent JavaScript



Download 2,16 Mb.
Pdf ko'rish
bet46/165
Sana09.07.2022
Hajmi2,16 Mb.
#762987
1   ...   42   43   44   45   46   47   48   49   ...   165
Bog'liq
Eloquent JavaScript

Deep comparison
The
==
operator compares objects by identity. But sometimes you’d prefer to
compare the values of their actual properties.
80


Write a function
deepEqual
that takes two values and returns true only if they
are the same value or are objects with the same properties, where the values
of the properties are equal when compared with a recursive call to
deepEqual
.
To find out whether values should be compared directly (use the
===
operator
for that) or have their properties compared, you can use the
typeof
operator.
If it produces
"object"
for both values, you should do a deep comparison.
But you have to take one silly exception into account: because of a historical
accident,
typeof null
also produces
"object"
.
The
Object.keys
function will be useful when you need to go over the prop-
erties of objects to compare them.
81


“There are two ways of constructing a software design: One way is
to make it so simple that there are obviously no deficiencies, and the
other way is to make it so complicated that there are no obvious
deficiencies.”
—C.A.R. Hoare, 1980 ACM Turing Award Lecture
Chapter 5
Higher-Order Functions
A large program is a costly program, and not just because of the time it takes
to build. Size almost always involves complexity, and complexity confuses
programmers. Confused programmers, in turn, introduce mistakes (
bugs
) into
programs. A large program then provides a lot of space for these bugs to hide,
making them hard to find.
Let’s briefly go back to the final two example programs in the introduction.
The first is self-contained and six lines long.
let total = 0, count = 1;
while (count <= 10) {
total += count;
count += 1;
}
console.log(total);
The second relies on two external functions and is one line long.
console.log(sum(range(1, 10)));
Which one is more likely to contain a bug?
If we count the size of the definitions of
sum
and
range
, the second program
is also big—even bigger than the first. But still, I’d argue that it is more likely
to be correct.
It is more likely to be correct because the solution is expressed in a vocabulary
that corresponds to the problem being solved. Summing a range of numbers
isn’t about loops and counters. It is about ranges and sums.
The definitions of this vocabulary (the functions
sum
and
range
) will still
involve loops, counters, and other incidental details. But because they are
expressing simpler concepts than the program as a whole, they are easier to
get right.
82



Download 2,16 Mb.

Do'stlaringiz bilan baham:
1   ...   42   43   44   45   46   47   48   49   ...   165




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish