ΠΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ: ryanmcdermott/clean-code-javascript
ΠΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΏΠΎ ΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΏΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π½Π° 4 ΡΠ΅Π²ΡΠ°Π»Ρ 2017 Π³ΠΎΠ΄Π°
- ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
- ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
- Π€ΡΠ½ΠΊΡΠΈΠΈ
- ΠΠ±ΡΠ΅ΠΊΡΡ ΠΈ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
- ΠΠ»Π°ΡΡΡ
- Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ
- ΠΡΠ»Π°Π²Π»ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ
- Π€ΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ
- ΠΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ
ΠΠ΄Π°ΠΏΡΠ°ΡΠΈΡ Π΄Π»Ρ JavaScript ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΊΠ½ΠΈΠ³ΠΈ Π ΠΎΠ±Π΅ΡΡΠ° ΠΠ°ΡΡΠΈΠ½Π° Π§ΠΈΡΡΡΠΉ ΠΊΠΎΠ΄. ΠΡΠΎ Π½Π΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΡΠΈΠ»Ρ. ΠΡΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΈΡΠ°Π±Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π½Π° JavaScript.
ΠΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π·Π΄Π΅ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡΠΎΠ³ΠΎ ΡΠΎΠ±Π»ΡΠ΄Π°ΡΡΡΡ ΠΈ Π΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡ Π²ΡΠ΅ΠΎΠ±ΡΠ΅Π΅ ΠΏΡΠΈΠ·Π½Π°Π½ΠΈΠ΅. ΠΡΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π»ΠΈΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ Π»Π΅Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠ²Π½ΡΠΌ ΠΎΠΏΡΡΠΎΠΌ Π°Π²ΡΠΎΡΠΎΠ² Π§ΠΈΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΡΠΊΡΡΡΡΠ²Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΡΠΈΠ΄Π΅ΡΡΡΠΈ Π»Π΅Ρ, ΠΈ ΠΌΡ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΌΡ ΡΡΠΈΠΌΡΡ. ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΏΠΎΡΡΠ°ΡΠ΅Π΅Ρ Π΄ΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΠ° ΡΠ°ΠΌΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ, Π±ΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ³Π΄Π° Ρ Π½Π°Ρ ΠΏΠΎΡΠ²ΡΡΡΡ ΠΆΠ΅ΡΡΠΊΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΠΊΠΎΡΠΎΡΡΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ. Π ΡΠ΅ΠΉΡΠ°Ρ ΠΏΡΡΡΡ ΡΡΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΡΠ»ΡΠΆΠ°Ρ ΠΊΡΠΈΡΠ΅ΡΠΈΠ΅ΠΌ ΠΎΡΠ΅Π½ΠΊΠ° ΠΊΠ°ΡΠ΅ΡΡΠ²Π° JavaScript-ΠΊΠΎΠ΄Π°, ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ ΠΈ Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ.
Π Π΅ΡΠ΅. ΠΠ½Π°Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² Π½Π΅ ΡΡΠ°Π·Ρ ΡΠ΄Π΅Π»Π°Π΅Ρ Π²Π°Ρ Π»ΡΡΡΠ΅ ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ, Π° ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ Π»Π΅Ρ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π²Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½Π΅ΡΠ΅ ΡΠΎΠ²Π΅ΡΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ²ΡΠΉ Π½Π°Π±ΡΠΎΡΠΎΠΊ, ΠΊΠ°ΠΊ ΠΌΠΎΠΊΡΠ°Ρ Π³Π»ΠΈΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ²ΠΎΡ ΡΠΎΡΠΌΡ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π²ΡΠ΅ ΠΌΡ ΠΏΡΠΎΠ½ΠΈΠ·Π°Π½Ρ Π½Π΅ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π½Π°Ρ ΠΊΠΎΠ΄ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ. ΠΠ΅ ΠΈΡΡΡΠ·Π°ΠΉΡΠ΅ ΡΠ΅Π±Ρ Π·Π° ΠΏΠ΅ΡΠ²ΡΠ΅, Π½ΡΠΆΠ΄Π°ΡΡΠΈΠ΅ΡΡ Π² ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΈ, Π½Π°Π±ΡΠΎΡΠΊΠΈ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΡΡΠ·Π°ΠΉΡΠ΅ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄!
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈ ΠΏΡΠΎΠΈΠ·Π½ΠΎΡΠΈΠΌΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΠ»ΠΎΡ ΠΎ:
const yyyymmdstr = moment().format('YYYY/MM/DD');
Π₯ΠΎΡΠΎΡΠΎ:
const currentDate = moment().format('YYYY/MM/DD');
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ Π»Π΅ΠΊΡΠΈΠΊΠΎΠ½ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
ΠΠ»ΠΎΡ ΠΎ:
getUserInfo();
getClientData();
getCustomerRecord();
Π₯ΠΎΡΠΎΡΠΎ:
getUser();
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡ ΠΏΡΠΎΡΠΈΡΠ°Π΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΠΊΠΎΠ΄Π°, ΡΠ΅ΠΌ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ Π½Π°ΠΏΠΈΡΠ΅ΠΌ. ΠΡΠΎ Π²Π°ΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ, Π±ΡΠ» ΡΠΈΡΠ°Π±Π΅Π»ΡΠ½ΡΠΌ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°. ΠΠ΅Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°Π·Π²Π°Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡ ΡΠ΄ΡΠ°ΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈ ΠΎΡΠΊΠΎΡΠ±Π»ΡΡΡ Π½Π°ΡΠΈΡ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ. ΠΠ΅Π»Π°ΠΉΡΠ΅ Π²Π°ΡΠΈ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°. ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π²ΡΠΎΠ΄Π΅ buddy.js ΠΈ ESLint ΠΏΠΎΠΌΠΎΠ³ΡΡ Π½Π°ΠΉΡΠΈ Π½Π΅Π½Π°Π·Π²Π°Π½Π½ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.
ΠΠ»ΠΎΡ ΠΎ:
// Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ 86400000?
setTimeout(blastOff, 86400000);
Π₯ΠΎΡΠΎΡΠΎ:
// ΠΠ±ΡΡΠ²Π»ΡΠΉΡΠ΅ ΠΈΡ
ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ `const` ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π±ΡΠΊΠ²Π°ΠΌΠΈ Π² Π·Π°Π³Π»Π°Π²Π½ΠΎΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ΅.
const MILLISECONDS_IN_A_DAY = 86400000;
setTimeout(blastOff, MILLISECONDS_IN_A_DAY);
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠ»ΠΎΡ ΠΎ:
const address = 'One Infinite Loop, Cupertino 95014';
const cityZipCodeRegex = /^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$/;
saveCityZipCode(address.match(cityZipCodeRegex)[1], address.match(cityZipCodeRegex)[2]);
Π₯ΠΎΡΠΎΡΠΎ:
const address = 'One Infinite Loop, Cupertino 95014';
const cityZipCodeRegex = /^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$/;
const [, city, zipCode] = address.match(cityZipCodeRegex) || [];
saveCityZipCode(city, zipCode);
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆ 3270 Π°Π½ΠΈΡ
Π―Π²Π½ΠΎΠ΅ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ Π½Π΅ΡΠ²Π½ΠΎΠ΅.
ΠΠ»ΠΎΡ ΠΎ:
const locations = ['Austin', 'New York', 'San Francisco'];
locations.forEach((l) => {
doStuff();
doSomeOtherStuff();
// ...
// ...
// ...
// Π‘ΡΠΎΠΉΡΠ΅. ΠΡΠ΅ ΡΠ°Π·, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ `l`?
dispatch(l);
});
Π₯ΠΎΡΠΎΡΠΎ:
const locations = ['Austin', 'New York', 'San Francisco'];
locations.forEach((location) => {
doStuff();
doSomeOtherStuff();
// ...
// ...
// ...
dispatch(location);
});
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡΠ»ΠΈ Π²Π°ΡΠ΅ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°/ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π³ΠΎΠ²ΠΎΡΠΈΡ Π·Π° ΡΠ΅Π±Ρ, Π½Π΅ ΠΏΠΎΠ²ΡΠΎΡΡΠΉΡΠ΅ Π΅Π³ΠΎ Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
ΠΠ»ΠΎΡ ΠΎ:
const Car = {
carMake: 'Honda',
carModel: 'Accord',
carColor: 'Blue'
};
function paintCar(car) {
car.carColor = 'Red';
}
Π₯ΠΎΡΠΎΡΠΎ:
const Car = {
make: 'Honda',
model: 'Accord',
color: 'Blue'
};
function paintCar(car) {
car.color = 'Red';
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΡΠΎΡΠΊΠΎΠΉ ΡΡ Π΅ΠΌΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°ΡΡΠΎ ΡΠΈΡΠ΅, ΡΠ΅ΠΌ ΠΊΠΎΡΠΎΡΠΊΠ°Ρ ΡΡ
Π΅ΠΌΠ° Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ. ΠΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΅Π΅, Π²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π·Π°Π΄Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ undefined
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΡΡΠ³ΠΈΠ΅ "falsy" Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ''
, ""
, false
, null
, 0
ΠΈ NaN
, Π½Π΅ Π±ΡΠ΄ΡΡ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΠ»ΠΎΡ ΠΎ:
function createMicrobrewery(name) {
const breweryName = name || 'Hipster Brew Co.';
// ...
}
Π₯ΠΎΡΠΎΡΠΎ:
function createMicrobrewery(breweryName = 'Hipster Brew Co.') {
// ...
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠΎΠ»Π΅Π΅ ΡΡΠ΅Ρ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡΠ½ΠΎΠΌΡ Π²Π·ΡΡΠ²Ρ, Π³Π΄Π΅ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ.
ΠΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΈΠ»ΠΈ Π΄Π²Π° - ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ, ΡΡΠ΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½ΡΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅Π³Π°ΡΡ. ΠΠΎΠ»ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΎ. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΡΠ°Π΅ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ. ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΡΠ»ΡΡΠ°Π΅Π², Π³Π΄Π΅ ΡΡΠΎ ΠΏΡΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ JavaScript ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½Π° Π»Π΅ΡΡ, Π±Π΅Π· ΠΊΠ»Π°ΡΡΠΎΠ² Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ½ΠΎΠ²Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ , Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ΄Π°Π΅ΡΠ΅ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄Π΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄Π΅ΡΡΡΡΠΊΡΠΈΠΈ ΠΈΠ· ES2015/ES6. ΠΠ½ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²:
- ΠΠΎΠ³Π΄Π° Π²Ρ ΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠΈΠ³Π½Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΎ ΡΡΠ°Π·Ρ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ.
- ΠΠ΅ΡΡΡΡΠΊΡΠΈΡ ΠΊΠ»ΠΎΠ½ΠΈΡΡΠ΅Ρ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°-ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² ΡΡΠ½ΠΊΡΠΈΡ. ΠΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ. ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈ ΠΌΠ°ΡΡΠΈΠ²Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°-ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΠ ΠΊΠ»ΠΎΠ½ΠΈΡΡΡΡΡΡ.
- ΠΠΈΠ½ΡΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΠΈΡΡ Π²Π°Ρ ΠΎ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ , ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· Π΄Π΅ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ»ΠΎΡ ΠΎ:
function createMenu(title, body, buttonText, cancellable) {
// ...
}
Π₯ΠΎΡΠΎΡΠΎ:
function createMenu({ title, body, buttonText, cancellable }) {
// ...
}
createMenu({
title: 'Foo',
body: 'Bar',
buttonText: 'Baz',
cancellable: true
});
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡΠΎ, Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ, ΡΠ°ΠΌΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π΅Π»Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ ΠΎΠ΄Π½Ρ Π²Π΅ΡΡ, ΠΈΡ ΡΡΡΠ΄Π½Π΅Π΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ, ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ. ΠΡΠ»ΠΈ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΎΠ½Π° Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ°Π±ΠΎΡΠ°Π½Π°, Π° Π²Π°Ρ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠΈΡΠ΅. ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° Π²Ρ Π½Π΅ ΠΏΠΎΡΠ΅ΡΠΏΠ½Π΅ΡΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ, ΠΊΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°, ΡΠΎ Π²Ρ ΡΠΆΠ΅ ΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΏΠΎΠ·Π°Π΄ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ².
ΠΠ»ΠΎΡ ΠΎ:
function emailClients(clients) {
clients.forEach((client) => {
const clientRecord = database.lookup(client);
if (clientRecord.isActive()) {
email(client);
}
});
}
Π₯ΠΎΡΠΎΡΠΎ:
function emailClients(clients) {
clients
.filter(isClientActive)
.forEach(email);
}
function isClientActive(client) {
const clientRecord = database.lookup(client);
return clientRecord.isActive();
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠ»ΠΎΡ ΠΎ:
function addToDate(date, month) {
// ...
}
const date = new Date();
// ΠΠ· ΠΈΠΌΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΎΠ½Π° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ
addToDate(date, 1);
Π₯ΠΎΡΠΎΡΠΎ:
function addMonthToDate(month, date) {
// ...
}
const date = new Date();
addMonthToDate(1, date);
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΡΡΠΎΠ²Π΅Π½Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ, Π²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π΄Π΅Π»Π°Π΅Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ. Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΎΡΡΠΎΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ»ΠΎΡ ΠΎ:
function parseBetterJSAlternative(code) {
const REGEXES = [
// ...
];
const statements = code.split(' ');
const tokens = [];
REGEXES.forEach((REGEX) => {
statements.forEach((statement) => {
// ...
});
});
const ast = [];
tokens.forEach((token) => {
// Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ...
});
ast.forEach((node) => {
// ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌ...
});
}
Π₯ΠΎΡΠΎΡΠΎ:
function tokenize(code) {
const REGEXES = [
// ...
];
const statements = code.split(' ');
const tokens = [];
REGEXES.forEach((REGEX) => {
statements.forEach((statement) => {
tokens.push( /* ... */ );
});
});
return tokens;
}
function lexer(tokens) {
const ast = [];
tokens.forEach((token) => {
ast.push( /* ... */ );
});
return ast;
}
function parseBetterJSAlternative(code) {
const tokens = tokenize(code);
const ast = lexer(tokens);
ast.forEach((node) => {
// ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌ...
});
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠ΅Π»Π°ΠΉΡΠ΅ Π²ΡΠ΅, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π°. ΠΠΎΠ²ΡΠΎΡΡΡΡΠΈΠΉΡΡ ΠΊΠΎΠ΄ ΠΏΠ»ΠΎΡ ΡΠ΅ΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΡΡ Π²Π°ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ, Π΅Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ .
ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅ ΡΠ΅Π±Π΅, Π²Ρ ΠΎΡΠΊΡΡΠ»ΠΈ ΡΠ΅ΡΡΠΎΡΠ°Π½ ΠΈ Π²Π΅Π΄Π΅ΡΠ΅ ΡΡΠ΅Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² (Π²ΡΠ΅Ρ Π²Π°ΡΠΈΡ ΠΏΠΎΠΌΠΈΠ΄ΠΎΡΠΎΠ², Π»ΡΠΊΠ°, ΡΠ΅ΡΠ½ΠΎΠΊΠ°, ΡΠΏΠ΅ΡΠΈΠΉ ΠΈ Ρ.Π΄.). ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΈΡΠΊΠΎΠ² Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°ΠΌΠΈ, ΡΠΎ, ΠΊΠΎΠ³Π΄Π° Ρ Π²Π°Ρ Π·Π°ΠΊΠ°ΠΆΡΡ ΡΠΎΠΌΠ°ΡΠ½ΡΠΉ ΡΡΠΏ, Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΈΡ Π²ΡΠ΅. ΠΡΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ Ρ Π²Π°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½, ΡΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΅Π³ΠΎ!
Π§Π°ΡΡΠΎ Π²Ρ Π΄ΡΠ±Π»ΠΈΡΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ Π²Π°Ρ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ°ΡΡΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΡΡ ΠΎΠΆΠΈ, Π½ΠΎ ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠΈΡ Π·Π°ΡΡΠ°Π²Π»ΡΡΡ Π²Π°Ρ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ, Π΄Π΅Π»Π°ΡΡΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠ΅Π³ΠΎΡΡ ΠΊΠΎΠ΄Π° ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΠ΅ΠΉ ΡΡΡ ΡΠ°Π·Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ/ΠΌΠΎΠ΄ΡΠ»Ρ/ΠΊΠ»Π°ΡΡΠ°.
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅ΡΠ°ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² (SOLID-ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°ΠΌ), ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΠ»Π°ΡΡΡ. ΠΠ»ΠΎΡ ΠΈΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Ρ ΡΠΆΠ΅, ΡΠ΅ΠΌ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠΉΡΡ ΠΊΠΎΠ΄, ΡΠ°ΠΊ ΡΡΠΎ Π±ΡΠ΄ΡΡΠ΅ ΠΎΡΡΠΎΡΠΎΠΆΠ½Ρ! ΠΠΎΠΏΡΠΎΡΡΡ Π³ΠΎΠ²ΠΎΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΎΡΠΎΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ, Π΄Π΅Π»Π°ΠΉΡΠ΅! ΠΠ΅ ΠΏΠΎΠ²ΡΠΎΡΡΠΉΡΠ΅ ΡΠ΅Π±Ρ, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π² Π»ΡΠ±ΠΎΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΡΠ΅Π±Ρ, Π²Π½ΠΎΡΡΡΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΡ ΡΠ°Π΄ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ.
ΠΠ»ΠΎΡ ΠΎ:
function showDeveloperList(developers) {
developers.forEach((developer) => {
const expectedSalary = developer.calculateExpectedSalary();
const experience = developer.getExperience();
const githubLink = developer.getGithubLink();
const data = {
expectedSalary,
experience,
githubLink
};
render(data);
});
}
function showManagerList(managers) {
managers.forEach((manager) => {
const expectedSalary = manager.calculateExpectedSalary();
const experience = manager.getExperience();
const portfolio = manager.getMBAProjects();
const data = {
expectedSalary,
experience,
portfolio
};
render(data);
});
}
Π₯ΠΎΡΠΎΡΠΎ:
function showEmployeeList(employees) {
employees.forEach((employee) => {
const expectedSalary = employee.calculateExpectedSalary();
const experience = employee.getExperience();
let portfolio = employee.getGithubLink();
if (employee.type === 'manager') {
portfolio = employee.getMBAProjects();
}
const data = {
expectedSalary,
experience,
portfolio
};
render(data);
});
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΠΉΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Object.assign
ΠΠ»ΠΎΡ ΠΎ:
const menuConfig = {
title: null,
body: 'Bar',
buttonText: null,
cancellable: true
};
function createMenu(config) {
config.title = config.title || 'Foo';
config.body = config.body || 'Bar';
config.buttonText = config.buttonText || 'Baz';
config.cancellable = config.cancellable === undefined ? config.cancellable : true;
}
createMenu(menuConfig);
Π₯ΠΎΡΠΎΡΠΎ:
const menuConfig = {
title: 'Order',
// ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΏΠΎΠ»Π΅ 'body'
buttonText: 'Send',
cancellable: true
};
function createMenu(config) {
config = Object.assign({
title: 'Foo',
body: 'Bar',
buttonText: 'Baz',
cancellable: true
}, config);
// config ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°Π²Π΅Π½: {title: "Order", body: "Bar", buttonText: "Send", cancellable: true}
// ...
}
createMenu(menuConfig);
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
Π€Π»Π°Π³ΠΈ Π³ΠΎΠ²ΠΎΡΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π΄Π΅Π»Π°Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ ΠΎΠ΄Π½Ρ Π²Π΅ΡΡ. Π€ΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄Π΅Π»Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ. Π Π°Π·Π΄Π΅Π»ΠΈΡΠ΅ Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π΅ΡΠ»ΠΈ, ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅, ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΉ ΠΊΠΎΠ΄.
ΠΠ»ΠΎΡ ΠΎ:
function createFile(name, temp) {
if (temp) {
fs.create(`./temp/${name}`);
} else {
fs.create(name);
}
}
Π₯ΠΎΡΠΎΡΠΎ:
function createFile(name) {
fs.create(name);
}
function createTempFile(name) {
createFile(`./temp/${name}`);
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ, ΠΊΡΠΎΠΌΠ΅ ΠΊΠ°ΠΊ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄ΡΡΠ³ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠ±ΠΎΡΠ½ΡΠΌ ΡΡΡΠ΅ΠΊΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ», ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ Π²ΡΠ΅Ρ ΡΠ²ΠΎΠΈΡ Π΄Π΅Π½Π΅Π³ Π½Π° Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΡΠ°.
ΠΠ΄Π½Π°ΠΊΠΎ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠ»ΡΡΠ°ΡΡ Π²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΡΡΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ. ΠΠ°ΠΊ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Π·Π°ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ». Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ, Π³Π΄Π΅ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ. ΠΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ. ΠΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ΅ΡΠ²ΠΈΡ, Π΄Π΅Π»Π°ΡΡΠΈΠΉ ΡΡΠΎ. ΠΠ΄ΠΈΠ½ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½.
ΠΠ»Π°Π²Π½ΠΎΠ΅ Π·Π΄Π΅ΡΡ - ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ: ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΡΡΡΡΠΊΡΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΊΠ΅ΠΌ ΡΠ³ΠΎΠ΄Π½ΠΎ, ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ Π²Π°ΡΠΈΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ². ΠΡΠ»ΠΈ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ, Π²Ρ ΡΡΠ°Π½Π΅ΡΠ΅ ΡΡΠ°ΡΡΠ»ΠΈΠ²Π΅Π΅, ΡΠ΅ΠΌ ΠΏΠΎΠ΄Π°Π²Π»ΡΡΡΠ΅Π΅ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ².
ΠΠ»ΠΎΡ ΠΎ:
// ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ Π·Π° Π½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΡ.
// Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΠΌΠ°ΡΡΠΈΠ² ΠΈ Π΅ΡΠ»ΠΈ Π±Ρ Ρ Π½Π°Ρ Π±ΡΠ»Π° Π΅ΡΠ΅ ΠΎΠ΄Π½Π° ΡΡΠ½ΠΊΡΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ°Ρ ΡΡΡ ΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΡΠΎ ΡΡΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ΅.
let name = 'Ryan McDermott';
function splitIntoFirstAndLastName() {
name = name.split(' ');
}
splitIntoFirstAndLastName();
console.log(name); // ['Ryan', 'McDermott'];
Π₯ΠΎΡΠΎΡΠΎ:
function splitIntoFirstAndLastName(name) {
return name.split(' ');
}
const name = 'Ryan McDermott';
const newName = splitIntoFirstAndLastName(name);
console.log(name); // 'Ryan McDermott';
console.log(newName); // ['Ryan', 'McDermott'];
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
Π JavaScript ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ/ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅. Π ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², Π΅ΡΠ»ΠΈ Π²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²Π½ΠΎΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ² ΠΊΠΎΡΠ·ΠΈΠ½Ρ ΠΏΠΎΠΊΡΠΏΠΎΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΠ²Π°ΡΠ°, ΡΠΎ Π»ΡΠ±Π°Ρ Π΄ΡΡΠ³Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΎΡ ΠΌΠ°ΡΡΠΈΠ² cart
, Π±ΡΠ΄Π΅Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡΠΎ Π² ΡΠ°Π²Π½ΠΎΠΉ ΠΌΠ΅ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Ρ
ΠΎΡΠΎΡΠΎ ΠΈ ΠΏΠ»ΠΎΡ
ΠΎ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΡΠ΅Π±Π΅ ΠΏΠ»ΠΎΡ
ΠΎΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ.
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ Π½Π° "ΠΡΠΏΠΈΡΡ" - ΠΊΠ½ΠΎΠΏΠΊΡ, Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ purchase
, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ Π·Π°ΠΏΡΠΎΡ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ² cart
Π½Π° ΡΠ΅ΡΠ²Π΅Ρ. ΠΠ·-Π·Π° ΠΏΠ»ΠΎΡ
ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ΅ΡΠΈ ΡΡΠ½ΠΊΡΠΈΡ purchase
Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΏΡΡΠ°ΡΡΡΡ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π·Π°ΠΏΡΠΎΡ. Π ΡΡΠΎ Π΅ΡΠ»ΠΈ Π² ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΠΊΠ½ΠΎΠΏΠΊΡ "ΠΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΊΠΎΡΠ·ΠΈΠ½Ρ" Π½Π° ΡΠΎΠ²Π°ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ½ Π½Π΅ Ρ
ΠΎΡΠ΅Π» ΠΏΠΎΠΊΡΠΏΠ°ΡΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π°ΡΠ°Π»ΡΡ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ Π·Π°ΠΏΡΠΎΡ? ΠΡΠ»ΠΈ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ, Π° ΡΠ΅ΡΠ΅Π²ΠΎΠΉ Π·Π°ΠΏΡΠΎΡ ΡΠΆΠ΅ Π½Π°ΡΠ°Π»ΡΡ, ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΊΡΠΏΠΊΠΈ ΠΏΠΎΡΠ»Π΅Ρ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠΉ ΡΠΎΠ²Π°Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΠΊΠΎΡΠ·ΠΈΠ½Ρ ΠΏΠΎΠΊΡΠΏΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ½ΠΊΡΠΈΡ addItemToCart
ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π»Π° ΠΏΡΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ²Π°ΡΠ°.
ΠΡΠ»ΠΈΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡΠ»ΠΎ Π±Ρ, ΡΡΠΎΠ±Ρ ΡΡΠ½ΠΊΡΠΈΡ addItemToCart
Π²ΡΠ΅Π³Π΄Π° ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π»Π° ΠΌΠ°ΡΡΠΈΠ² cart
, ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π»Π° Π΅Π³ΠΎ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π»Π° ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠ»ΠΎΠ½. ΠΡΠΎ Π±Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π»ΠΎ, ΡΡΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΠΊΠΎΡΠ·ΠΈΠ½Ρ ΠΏΠΎΠΊΡΠΏΠΎΠΊ, Π½Π΅ Π±ΡΠ΄ΡΡ Π·Π°ΡΡΠΎΠ½ΡΡΡ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ.
ΠΠ²Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ΅ΡΠ΅ΠΆΠ΅Π½ΠΈΡ:
- ΠΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π²Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΡΠΈΠ²ΡΠΊΠ½Π΅ΡΠ΅ ΠΊ ΡΠ°ΠΊΠΎΠΌΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΠ΅, ΡΡΠΎ ΡΡΠΈ ΡΠ»ΡΡΠ°ΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ΅Π΄ΠΊΠΈ. ΠΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ² Π½Π΅ Π±ΡΠ»ΠΎ ΡΠΎΠ²ΡΠ΅ΠΌ!
- ΠΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ Π΄ΠΎΡΠΎΠ³ΠΈΠΌΠΈ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Π ΡΡΠ°ΡΡΡΡ, ΡΡΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ [ΠΎΡΠ»ΠΈΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ] (https://facebook.github.io/immutable-js/), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ°ΠΊΠΎΠΌΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΡΡΡ Π±ΡΡΡΡΡΠΌ ΠΈ Π½Π΅ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΡΡΠ°ΡΠ½ΡΠΌ ΠΏΠΎ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π΅ΡΠ»ΠΈ Π±Ρ Π²Ρ Π²ΡΡΡΠ½ΡΡ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈ ΠΌΠ°ΡΡΠΈΠ²Ρ.
ΠΠ»ΠΎΡ ΠΎ:
const addItemToCart = (cart, item) => {
cart.push({ item, date: Date.now() });
};
Π₯ΠΎΡΠΎΡΠΎ:
const addItemToCart = (cart, item) => {
return [...cart, { item, date : Date.now() }];
};
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠ°Π³ΡΡΠ·Π½Π΅Π½ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° - ΠΏΠ»ΠΎΡ
Π°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π² JavaScript, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΠ°ΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ²Π°ΡΡ Ρ Π΄ΡΡΠ³ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ, Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ API ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π² Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΡΡΠ²Π΅ Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ production.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠ°Π·ΠΌΡΡΠ»ΡΠ΅ΠΌ ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ΅: ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΡΠ°ΡΡΠΈΡΠΈΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Array
, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΈΠΌΠ΅Π» ΠΌΠ΅ΡΠΎΠ΄ diff
, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ? ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΊ Array.prototype
, Π½ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΠ°ΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ²Π°ΡΡ Ρ Π΄ΡΡΠ³ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ, ΠΏΡΡΠ°ΡΡΠ΅ΠΉΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅. Π§ΡΠΎ, Π΅ΡΠ»ΠΈ ΡΡΠ° Π΄ΡΡΠ³Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ diff
ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ, Π° ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°? ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ Π±ΡΠ»ΠΎ Π±Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ES2015/ES6 ΠΊΠ»Π°ΡΡΡ ΠΈ ΡΠ°ΡΡΠΈΡΠΈΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Array
.
ΠΠ»ΠΎΡ ΠΎ:
Array.prototype.diff = function diff(comparisonArray) {
const hash = new Set(comparisonArray);
return this.filter(elem => !hash.has(elem));
};
Π₯ΠΎΡΠΎΡΠΎ:
class SuperArray extends Array {
diff(comparisonArray) {
const hash = new Set(comparisonArray);
return this.filter(elem => !hash.has(elem));
}
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½Π΅ΠΉ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ
JavaScript Π½Π΅ ΡΠ°ΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠ·ΡΠΊ ΠΊΠ°ΠΊ Haskell, Π½ΠΎ Ρ Π½Π΅Π³ΠΎ Π΅ΡΡΡ ΠΏΡΠ΅Π΄ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΡ ΠΊ ΡΡΠΎΠΌΡ. Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΡΠΈΡΠ΅ ΠΈ ΠΈΡ ΠΏΡΠΎΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΠΉΡΠ΅ ΡΡΠΎΡ ΡΡΠΈΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅.
ΠΠ»ΠΎΡ ΠΎ:
const programmerOutput = [
{
name: 'Uncle Bobby',
linesOfCode: 500
}, {
name: 'Suzie Q',
linesOfCode: 1500
}, {
name: 'Jimmy Gosling',
linesOfCode: 150
}, {
name: 'Gracie Hopper',
linesOfCode: 1000
}
];
let totalOutput = 0;
for (let i = 0; i < programmerOutput.length; i++) {
totalOutput += programmerOutput[i].linesOfCode;
}
Π₯ΠΎΡΠΎΡΠΎ:
const programmerOutput = [
{
name: 'Uncle Bobby',
linesOfCode: 500
}, {
name: 'Suzie Q',
linesOfCode: 1500
}, {
name: 'Jimmy Gosling',
linesOfCode: 150
}, {
name: 'Gracie Hopper',
linesOfCode: 1000
}
];
const INITIAL_VALUE = 0;
const totalOutput = programmerOutput
.map((programmer) => programmer.linesOfCode)
.reduce((acc, linesOfCode) => acc + linesOfCode, INITIAL_VALUE);
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠ»ΠΎΡ ΠΎ:
if (fsm.state === 'fetching' && isEmpty(listNode)) {
// ...
}
Π₯ΠΎΡΠΎΡΠΎ:
function shouldShowSpinner(fsm, listNode) {
return fsm.state === 'fetching' && isEmpty(listNode);
}
if (shouldShowSpinner(fsmInstance, listNodeInstance)) {
// ...
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠ»ΠΎΡ ΠΎ:
function isDOMNodeNotPresent(node) {
// ...
}
if (!isDOMNodeNotPresent(node)) {
// ...
}
Π₯ΠΎΡΠΎΡΠΎ:
function isDOMNodePresent(node) {
// ...
}
if (isDOMNodePresent(node)) {
// ...
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π»ΡΠ΄Π΅ΠΉ, Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠ»ΡΡΠ°Π² ΡΡΠΎ, Π³ΠΎΠ²ΠΎΡΡΡ: "ΠΠ°ΠΊ Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π±Π΅Π· Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ if
?". ΠΡΠ²Π΅Ρ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΠΎΠΉ ΠΆΠ΅ ΡΠ΅Π»ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π΄Π°Π»Π΅Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΠΎΠΏΡΠΎΡ: "Π₯ΠΎΡΠΎΡΠΎ, ΡΡΠΎ Π·Π΄ΠΎΡΠΎΠ²ΠΎ, Π½ΠΎ ΠΏΠΎΡΠ΅ΠΌΡ Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΡΠΎΠΌΡ?". ΠΡΠ²Π΅Ρ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°Ρ
Π§ΠΈΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°: ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π΄Π΅Π»Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ Π²Π΅ΡΡ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ if
, Π²Ρ ΠΏΡΠΈΠ·Π½Π°Π΅ΡΠ΅ΡΡ ΡΠ²ΠΎΠ΅ΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΡΠΎ Π²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π΄Π΅Π»Π°Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΎΠ΄Π½Ρ Π²Π΅ΡΡ. ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, Π΄Π΅Π»Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ Π²Π΅ΡΡ.
ΠΠ»ΠΎΡ ΠΎ:
class Airplane {
// ...
getCruisingAltitude() {
switch (this.type) {
case '777':
return this.getMaxAltitude() - this.getPassengerCount();
case 'Air Force One':
return this.getMaxAltitude();
case 'Cessna':
return this.getMaxAltitude() - this.getFuelExpenditure();
}
}
}
Π₯ΠΎΡΠΎΡΠΎ:
class Airplane {
// ...
}
class Boeing777 extends Airplane {
// ...
getCruisingAltitude() {
return this.getMaxAltitude() - this.getPassengerCount();
}
}
class AirForceOne extends Airplane {
// ...
getCruisingAltitude() {
return this.getMaxAltitude();
}
}
class Cessna extends Airplane {
// ...
getCruisingAltitude() {
return this.getMaxAltitude() - this.getFuelExpenditure();
}
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
JavaScript - ΡΠ»Π°Π±ΠΎ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ - Π²Π°ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΠ½ΠΎΠ³Π΄Π° ΡΠ°ΠΊΠ°Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π° ΠΈΠ³ΡΠ°Π΅Ρ ΠΏΡΠΎΡΠΈΠ² Π²Π°Ρ ΠΈ Π²Π΅Π»ΠΈΠΊ ΡΠΎΠ±Π»Π°Π· Π²Π²Π΅ΡΡΠΈ Π² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΈΠΏΠΎΠ². ΠΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠΎΠ³ΠΎ. ΠΠ΅ΡΠ²ΡΠΉ - ΡΠΏΠ»ΠΎΡΠ½ΠΈΡΡ API.
ΠΠ»ΠΎΡ ΠΎ:
function travelToTexas(vehicle) {
if (vehicle instanceof Bicycle) {
vehicle.pedal(this.currentLocation, new Location('texas'));
} else if (vehicle instanceof Car) {
vehicle.drive(this.currentLocation, new Location('texas'));
}
}
Π₯ΠΎΡΠΎΡΠΎ:
function travelToTexas(vehicle) {
vehicle.move(this.currentLocation, new Location('texas'));
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡΠ»ΠΈ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Ρ Π±Π°Π·ΠΎΠ²ΡΠΌΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊΠΈ, ΡΠΈΡΠ»Π° ΠΈ ΠΌΠ°ΡΡΠΈΠ²Ρ, ΠΈ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ, Π½ΠΎ Π²Ρ Π²ΡΠ΅ Π΅ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΡΠ΅ΡΡ Π² ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΡΠΈΠΏΠΎΠ², Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π΄ΡΠΌΠ°ΡΡΡΡ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ TypeScript. ΠΡΠΎ ΠΎΡΠ»ΠΈΡΠ½Π°Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° ΠΎΠ±ΡΡΠ½ΠΎΠΌΡ JavaScript, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²Π°ΠΌ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ²Π΅ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ JavaScript ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΡΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΠΏΠΎΠ² JavaScript Π² ΡΠΎΠΌ, ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π΄Π΅Π»Π°ΡΡ Π΅Π΅ Ρ ΠΎΡΠΎΡΠΎ, ΠΎΠ½Π° ΠΈΠ·Π»ΠΈΡΠ½Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½Π° ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΠ°Ρ Π²Π°ΠΌΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ Π½Π΅ ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡΡΠ΅Ρ ΠΏΠΎΡΠ΅ΡΡΠ½Π½ΡΡ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ. ΠΠ΅ΡΠΆΠΈΡΠ΅ JavaScript Π² ΡΠΈΡΡΠΎΡΠ΅, ΠΏΠΈΡΠΈΡΠ΅ Ρ ΠΎΡΠΎΡΠΈΠ΅ ΡΠ΅ΡΡΡ ΠΈ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½Π·ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΄Π΅Π»Π°ΠΉΡΠ΅ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, Π½ΠΎ Ρ TypeScript (ΠΊΠΎΡΠΎΡΡΠΉ, ΠΊΠ°ΠΊ Ρ ΡΠΆΠ΅ ΡΠΊΠ°Π·Π°Π», - ΠΎΡΠ»ΠΈΡΠ½Π°Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°!).
ΠΠ»ΠΎΡ ΠΎ:
function combine(val1, val2) {
if (typeof val1 === 'number' && typeof val2 === 'number' ||
typeof val1 === 'string' && typeof val2 === 'string') {
return val1 + val2;
}
throw new Error('Must be of type String or Number');
}
Π₯ΠΎΡΠΎΡΠΎ:
function combine(val1, val2) {
return val1 + val2;
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π², Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ, Π²Ρ ΠΏΠΎΠΏΡΡΡΡ ΠΏΠΎΡΡΠ°ΡΠΈΠ»ΠΈ ΡΠ²ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ. [ΠΡΡΡ Ρ ΠΎΡΠΎΡΠΈΠ΅ ΡΠ΅ΡΡΡΡΡ] (https://github.com/petkaantonov/bluebird/wiki/Optimization-killers) Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ Π½Π΅Ρ Π²Π°ΡΠΊΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΈΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΠΊΠ° ΡΠΈΡΡΠ°ΡΠΈΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ.
ΠΠ»ΠΎΡ ΠΎ:
// Π ΡΡΠ°ΡΡΡ
Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ
ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΡ Ρ Π½Π΅Π·Π°ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ `list.length` - Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠ°Ρ.
// ΠΠ΅Π»ΠΎ Π² ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠΌ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΡΠ΅ΡΠ΅ `list.length`. Π ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ
ΡΡΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ.
for (let i = 0, len = list.length; i < len; i++) {
// ...
}
Π₯ΠΎΡΠΎΡΠΎ:
for (let i = 0; i < list.length; i++) {
// ...
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠ΅ΡΡΠ²ΡΠΉ ΠΊΠΎΠ΄ - ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΠ»ΠΎΡ ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠΉΡΡ ΠΊΠΎΠ΄. ΠΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Ρ ΡΠ°Π½ΠΈΡΡ Π΅Π³ΠΎ Π² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅. ΠΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΈΠ·Π±Π°Π²ΡΡΠ΅ΡΡ ΠΎΡ Π½Π΅Π³ΠΎ! Π ΡΠ»ΡΡΠ°Π΅ Π½Π°Π΄ΠΎΠ±Π½ΠΎΡΡΠΈ, Π΅Π³ΠΎ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΠΈΡΡΠΎΡΠΈΠΈ Π²Π΅ΡΡΠΈΠΉ.
ΠΠ»ΠΎΡ ΠΎ:
function oldRequestModule(url) {
// ...
}
function newRequestModule(url) {
// ...
}
const req = newRequestModule;
inventoryTracker('apples', req, 'www.inventory-awesome.io');
Π₯ΠΎΡΠΎΡΠΎ:
function newRequestModule(url) {
// ...
}
const req = newRequestModule;
inventoryTracker('apples', req, 'www.inventory-awesome.io');
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³Π΅ΡΡΠ΅ΡΡ ΠΈ ΡΠ΅ΡΡΠ΅ΡΡ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ Π½Π°ΠΏΡΡΠΌΡΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ. ΠΠΎΡΠ΅ΠΌΡ? ΠΠΎΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΠΈΡΠΈΠ½:
- ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
- ΠΠ΅Π»Π°Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ
set
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΡΠΌ. - ΠΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
- ΠΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π»Π΅Π³ΠΊΠΎ Π²Π½Π΅Π΄ΡΠΈΡΡ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΎΡΠΈΠ±ΠΎΠΊ.
- ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»Π΅Π½ΠΈΠ²ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ ΡΠ²ΠΎΠΉΡΡΠ² Π²Π°ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΈΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΠ»ΠΎΡ ΠΎ:
function makeBankAccount() {
// ...
return {
balance: 0,
// ...
};
}
const account = makeBankAccount();
account.balance = 100;
Π₯ΠΎΡΠΎΡΠΎ:
function makeBankAccount() {
// ΠΏΡΠΈΠ²Π°ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ
let balance = 0;
// Π³Π΅ΡΡΠ΅Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ Π½ΠΈΠΆΠ΅
function getBalance() {
return balance;
}
// ΡΠ΅ΡΡΠ΅Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ Π½ΠΈΠΆΠ΅
function setBalance(amount) {
// ... Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Π±Π°Π»Π°Π½ΡΠ°
balance = amount;
}
return {
// ...
getBalance,
setBalance,
};
}
const account = makeBankAccount();
account.setBalance(100);
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΠΎ ΠΏΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ (Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΈ ES5 ΠΈ Π½ΠΈΠΆΠ΅).
ΠΠ»ΠΎΡ ΠΎ:
const Employee = function(name) {
this.name = name;
};
Employee.prototype.getName = function getName() {
return this.name;
};
const employee = new Employee('John Doe');
console.log(`Employee name: ${employee.getName()}`); // Employee name: John Doe
delete employee.name;
console.log(`Employee name: ${employee.getName()}`); // Employee name: undefined
Π₯ΠΎΡΠΎΡΠΎ:
function makeEmployee(name) {
return {
getName() {
return name;
},
};
}
const employee = makeEmployee('John Doe');
console.log(`Employee name: ${employee.getName()}`); // Employee name: John Doe
delete employee.name;
console.log(`Employee name: ${employee.getName()}`); // Employee name: John Doe
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
Π§ΠΈΡΡΡΠΉ ΠΊΠΎΠ΄ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΡΠ΅Ρ: "ΠΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Ρ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ°". ΠΠ°ΠΌΠ°Π½ΡΠΈΠ²ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π±Π΅ ΠΊΠ»Π°ΡΡ, ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠΉ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π°, ΡΠ»ΠΎΠ²Π½ΠΎ Π² ΠΏΠΎΠ΅Π·Π΄ΠΊΡ Π²Π°ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ Π²Π·ΡΡΡ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ΅ΠΌΠΎΠ΄Π°Π½. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Π°Ρ ΠΊΠ»Π°ΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΠΎ Π΅Π΄ΠΈΠ½ΡΠΌ ΠΈ ΡΡΠΎ Π΄Π°ΡΡ Π΅ΠΌΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΡΠΈΠ½ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠΌΠ΅Π΅Ρ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΡΠΈ ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΊΠΈΡ ΠΏΡΠΈΡΠΈΠ½. ΠΡΠ»ΠΈ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ ΡΠ°ΡΡΡ, ΡΠΎ ΡΠΏΡΠΎΠ³Π½ΠΎΠ·ΠΈΡΠΎΠ²Π°ΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΡΠ°Π½Π΅Ρ ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎ.
ΠΠ»ΠΎΡ ΠΎ:
class UserSettings {
constructor(user) {
this.user = user;
}
changeSettings(settings) {
if (this.verifyCredentials()) {
// ...
}
}
verifyCredentials() {
// ...
}
}
Π₯ΠΎΡΠΎΡΠΎ:
class UserAuth {
constructor(user) {
this.user = user;
}
verifyCredentials() {
// ...
}
}
class UserSettings {
constructor(user) {
this.user = user;
this.auth = new UserAuth(user);
}
changeSettings(settings) {
if (this.auth.verifyCredentials()) {
// ...
}
}
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠ°ΠΊ Π·Π°ΡΠ²ΠΈΠ» ΠΠ΅ΡΡΡΠ°Π½ ΠΠ΅ΠΉΠ΅Ρ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ (ΠΊΠ»Π°ΡΡΡ, ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Ρ.Π΄.) Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ ΠΎΡΠΊΡΡΡΡΠΌΠΈ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Π½ΠΎ Π·Π°ΠΊΡΡΡΡΠΌΠΈ Π΄Π»Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. Π§ΡΠΎ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅? ΠΡΠΈΠ½ΡΠΈΠΏ Π·Π°ΠΊΡΠ΅ΠΏΠ»ΡΠ΅Ρ, ΡΡΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Π½ΠΎ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΠ»ΠΎΡ ΠΎ:
class AjaxAdapter extends Adapter {
constructor() {
super();
this.name = 'ajaxAdapter';
}
}
class NodeAdapter extends Adapter {
constructor() {
super();
this.name = 'nodeAdapter';
}
}
class HttpRequester {
constructor(adapter) {
this.adapter = adapter;
}
fetch(url) {
if (this.adapter.name === 'ajaxAdapter') {
return makeAjaxCall(url).then((response) => {
// ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ ΠΎΡΠ²Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ
});
} else if (this.adapter.name === 'httpNodeAdapter') {
return makeHttpCall(url).then((response) => {
// ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ ΠΎΡΠ²Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ
});
}
}
}
function makeAjaxCall(url) {
// Π΄Π΅Π»Π°Π΅ΠΌ Π·Π°ΠΏΡΠΎΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΡΠΎΠΌΠΈΡ
}
function makeHttpCall(url) {
// Π΄Π΅Π»Π°Π΅ΠΌ Π·Π°ΠΏΡΠΎΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΡΠΎΠΌΠΈΡ
}
Π₯ΠΎΡΠΎΡΠΎ:
class AjaxAdapter extends Adapter {
constructor() {
super();
this.name = 'ajaxAdapter';
}
request(url) {
// Π΄Π΅Π»Π°Π΅ΠΌ Π·Π°ΠΏΡΠΎΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΡΠΎΠΌΠΈΡ
}
}
class NodeAdapter extends Adapter {
constructor() {
super();
this.name = 'nodeAdapter';
}
request(url) {
// Π΄Π΅Π»Π°Π΅ΠΌ Π·Π°ΠΏΡΠΎΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΡΠΎΠΌΠΈΡ
}
}
class HttpRequester {
constructor(adapter) {
this.adapter = adapter;
}
fetch(url) {
return this.adapter.request(url).then((response) => {
// ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ ΠΎΡΠ²Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ
});
}
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡΠΎ ΡΡΡΠ°ΡΠ½ΡΠΉ ΡΠ΅ΡΠΌΠΈΠ½ Π΄Π»Ρ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ. Π€ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ ΠΎΠ½ Π·Π²ΡΡΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: "ΠΡΠ»ΠΈ S ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΡΠΈΠΏΠΎΠΌ T, ΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠΏΠ° Π’ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠΏΠ° S (ΡΠΎ Π΅ΡΡΡ, ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠΏΠ° S ΠΌΠΎΠ³ΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠΏΠ° Π’) Π±Π΅Π· Π²Π»ΠΈΡΠ½ΠΈΡ Π½Π° Π²Π°ΠΆΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ, ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΠΎΡΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ ΠΈ Ρ.Π΄.). Π Π΄Π°, Π² ΠΈΡΠΎΠ³Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ Π΅ΡΠ΅ ΡΡΡΠ°ΡΠ½Π΅ΠΉ.
ΠΡΡΡΠ΅Π΅ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΊΠ»Π°ΡΡΡ, ΡΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ Π²Π·Π°ΠΈΠΌΠΎΠ·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅, Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄Ρ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΊ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ. ΠΡΠΎ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ±ΠΈΠ²Π°ΡΡ Ρ ΡΠΎΠ»ΠΊΡ, ΡΠ°ΠΊ ΡΡΠΎ Π΄Π°Π²Π°ΠΉΡΠ΅ Π²Π·Π³Π»ΡΠ½Π΅ΠΌ Π½Π° ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ°-ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°. ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΊΠ²Π°Π΄ΡΠ°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΠ΅ΡΠ΅ ΠΈΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ("ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡΡ"), Π²Ρ Π±ΡΡΡΡΠΎ Π½Π°ΡΠΊΠ½Π΅ΡΠ΅ΡΡ Π½Π° Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎΡΡΠΈ.
ΠΠ»ΠΎΡ ΠΎ:
class Rectangle {
constructor() {
this.width = 0;
this.height = 0;
}
setColor(color) {
// ...
}
render(area) {
// ...
}
setWidth(width) {
this.width = width;
}
setHeight(height) {
this.height = height;
}
getArea() {
return this.width * this.height;
}
}
class Square extends Rectangle {
setWidth(width) {
this.width = width;
this.height = width;
}
setHeight(height) {
this.width = height;
this.height = height;
}
}
function renderLargeRectangles(rectangles) {
rectangles.forEach((rectangle) => {
rectangle.setWidth(4);
rectangle.setHeight(5);
const area = rectangle.getArea(); // ΠΠΠΠ₯Π: ΠΠ΅ΡΠ½Π΅Ρ 25 Π΄Π»Ρ ΠΠ²Π°Π΄ΡΠ°ΡΠ°. ΠΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ 20.
rectangle.render(area);
});
}
const rectangles = [new Rectangle(), new Rectangle(), new Square()];
renderLargeRectangles(rectangles);
Π₯ΠΎΡΠΎΡΠΎ:
class Shape {
setColor(color) {
// ...
}
render(area) {
// ...
}
}
class Rectangle extends Shape {
constructor(width, height) {
super();
this.width = width;
this.height = height;
}
getArea() {
return this.width * this.height;
}
}
class Square extends Shape {
constructor(length) {
super();
this.length = length;
}
getArea() {
return this.length * this.length;
}
}
function renderLargeShapes(shapes) {
shapes.forEach((shape) => {
const area = shape.getArea();
shape.render(area);
});
}
const shapes = [new Rectangle(4, 5), new Rectangle(4, 5), new Square(5)];
renderLargeShapes(shapes);
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
JavaScript Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΡΠ°ΠΊ ΡΡΠΎ ΡΡΠΎΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ°ΠΊ ΡΡΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΄ΡΡΠ³ΠΈΠ΅. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΈ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎ Π΄Π°ΠΆΠ΅ Π² Π²ΠΈΠ΄Ρ ΠΈΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ. ΠΡΠΈΠ½ΡΠΈΠΏ ΡΡΠ²Π΅ΡΠΆΠ΄Π°Π΅Ρ, ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ. ΠΠ·-Π·Π° ΡΡΠΈΠ½ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ, Π² JavaScript ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ - ΡΡΠΎ Π½Π΅ΡΠ²Π½ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ.
Π₯ΠΎΡΠΎΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΡΡΠ°Π½ΡΡ ΠΊΠ»Π°ΡΡΡ, ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π½Π°ΡΡΡΠΎΠ΅ΠΊ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠΎΠ»Π΅Π·Π½ΠΎ Π½Π΅ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΏΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΡ Π²ΡΠ΅Ρ , ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠ΅ ΠΎΠ½ΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΡΡΡΡ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΡΠ°Π·Π±ΡΡ Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
ΠΠ»ΠΎΡ ΠΎ:
class DOMTraverser {
constructor(settings) {
this.settings = settings;
this.setup();
}
setup() {
this.rootNode = this.settings.rootNode;
this.animationModule.setup();
}
traverse() {
// ...
}
}
const $ = new DOMTraverser({
rootNode: document.getElementsByTagName('body'),
animationModule() {} // Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π°Π½ΠΈΠΌΠ°ΡΠΈΡ Π½Π°ΠΌ Π½Π΅ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡ.
// ...
});
Π₯ΠΎΡΠΎΡΠΎ:
class DOMTraverser {
constructor(settings) {
this.settings = settings;
this.options = settings.options;
this.setup();
}
setup() {
this.rootNode = this.settings.rootNode;
this.setupOptions();
}
setupOptions() {
if (this.options.animationModule) {
// ...
}
}
traverse() {
// ...
}
}
const $ = new DOMTraverser({
rootNode: document.getElementsByTagName('body'),
options: {
animationModule() {}
}
});
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡΠΎΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π·Π°ΠΊΡΠ΅ΠΏΠ»ΡΠ΅Ρ Π΄Π²Π΅ Π²Π°ΠΆΠ½ΡΠ΅ Π²Π΅ΡΠΈ:
- ΠΠΎΠ΄ΡΠ»ΠΈ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. Π ΡΠ΅, ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΉ.
- ΠΠ±ΡΡΡΠ°ΠΊΡΠΈΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ. ΠΠ΅ΡΠ°Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΉ.
ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄ ΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΡΡΠ΄Π½ΡΠΌ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Ρ Angular.js, Π²Ρ Π²ΠΈΠ΄Π΅Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° Π² Π²ΠΈΠ΄Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (Dependency Injection - DI). ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ DIP ΠΈ DI - ΠΏΠΎΠ½ΡΡΠΈΡ Π½Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΠ΅, DIP ΠΎΠ±Π΅ΡΠ΅Π³Π°Π΅Ρ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΎΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π° ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅ΡΠ΅Π· DI. ΠΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ DIP Π² ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ. ΠΠ΅ΡΠ΅ΠΏΠ»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ - ΡΡΠΎ Π°Π½ΡΠΈΠΏΠ°ΡΡΠ΅ΡΠ½, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΈΠΌ.
ΠΠ°ΠΊ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ Π²ΡΡΠ΅, JavaScript Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΡΠ°ΠΊ ΡΡΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π½Π΅ΡΠ²Π½ΡΡ
ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠ². Π’ΠΎ Π΅ΡΡΡ, ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΡΠ²ΠΎΠΉΡΡΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ/ΠΊΠ»Π°ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ/ΠΊΠ»Π°ΡΡΡ. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π½Π΅ΡΠ²Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π·Π°ΠΏΡΠΎΡΠ° Π΄Π»Ρ InventoryTracker
Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΌΠ΅ΡΠΎΠ΄ requestItems
.
ΠΠ»ΠΎΡ ΠΎ:
class InventoryRequester {
constructor() {
this.REQ_METHODS = ['HTTP'];
}
requestItem(item) {
// ...
}
}
class InventoryTracker {
constructor(items) {
this.items = items;
// ΠΠΠΠ₯Π: ΠΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠ°.
this.requester = new InventoryRequester();
}
requestItems() {
this.items.forEach((item) => {
this.requester.requestItem(item);
});
}
}
const inventoryTracker = new InventoryTracker(['apples', 'bananas']);
inventoryTracker.requestItems();
Π₯ΠΎΡΠΎΡΠΎ:
class InventoryTracker {
constructor(items, requester) {
this.items = items;
this.requester = requester;
}
requestItems() {
this.items.forEach((item) => {
this.requester.requestItem(item);
});
}
}
class InventoryRequesterV1 {
constructor() {
this.REQ_METHODS = ['HTTP'];
}
requestItem(item) {
// ...
}
}
class InventoryRequesterV2 {
constructor() {
this.REQ_METHODS = ['WS'];
}
requestItem(item) {
// ...
}
}
// ΠΠΎΡΡΡΠΎΠΈΠ² Π½Π°ΡΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈΠ·Π²Π½Π΅ ΠΈ Π²Π½Π΅Π΄ΡΡΡ ΠΈΡ
, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ
// Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π°Ρ ΠΌΠΎΠ΄ΡΠ»Ρ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΠΌΠΎΠ΄Π½ΡΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ Π²Π΅Π±ΡΠΎΠΊΠ΅ΡΡ.
const inventoryTracker = new InventoryTracker(['apples', 'bananas'], new InventoryRequesterV2());
inventoryTracker.requestItems();
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡΠΈ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ Π² ES5 ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΄Π½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΠΈΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ (Π±ΡΠ΄ΡΡΠ΅ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ Π²Π΅ΡΠΎΡΡΠ½Π΅ΠΉ Π²ΡΠ΅Π³ΠΎ Π½Π΅Ρ), ΡΠΎ Π»ΡΡΡΠ΅ ΠΎΡΠ΄Π°ΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ°ΠΌ ES2015/ES6. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΠΉΡΠ΅ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, ΠΏΠΎΠΊΠ° Π²Ρ Π½Π΅ ΡΡΠΎΠ»ΠΊΠ½Π΅ΡΠ΅ΡΡ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΡ Π² Π±ΠΎΠ»Π΅Π΅ ΠΊΡΡΠΏΠ½ΡΡ ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ .
ΠΠ»ΠΎΡ ΠΎ:
const Animal = function(age) {
if (!(this instanceof Animal)) {
throw new Error('Instantiate Animal with `new`');
}
this.age = age;
};
Animal.prototype.move = function move() {};
const Mammal = function(age, furColor) {
if (!(this instanceof Mammal)) {
throw new Error('Instantiate Mammal with `new`');
}
Animal.call(this, age);
this.furColor = furColor;
};
Mammal.prototype = Object.create(Animal.prototype);
Mammal.prototype.constructor = Mammal;
Mammal.prototype.liveBirth = function liveBirth() {};
const Human = function(age, furColor, languageSpoken) {
if (!(this instanceof Human)) {
throw new Error('Instantiate Human with `new`');
}
Mammal.call(this, age, furColor);
this.languageSpoken = languageSpoken;
};
Human.prototype = Object.create(Mammal.prototype);
Human.prototype.constructor = Human;
Human.prototype.speak = function speak() {};
Π₯ΠΎΡΠΎΡΠΎ:
class Animal {
constructor(age) {
this.age = age;
}
move() { /* ... */ }
}
class Mammal extends Animal {
constructor(age, furColor) {
super(age);
this.furColor = furColor;
}
liveBirth() { /* ... */ }
}
class Human extends Mammal {
constructor(age, furColor, languageSpoken) {
super(age, furColor);
this.languageSpoken = languageSpoken;
}
speak() { /* ... */ }
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΏΠ°ΡΡΠ΅ΡΠ½ Π² JavaScript ΠΈ Π²Ρ Π²ΡΡΡΠ΅ΡΠΈΡΠ΅ Π΅Π³ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, JQuery ΠΈ Lodash. ΠΠ½ Π΄Π΅Π»Π°Π΅Ρ Π²Π°Ρ ΠΊΠΎΠ΄ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½ΡΠΌ. Π‘ΡΡΠΎΠΉΡΠ΅ ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ Π²Ρ ΡΠ²ΠΈΠ΄Π΅ΡΠ΅, Π½Π° ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²Π°Ρ ΠΊΠΎΠ΄. ΠΠ΅ΡΠΎΠ΄ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ this
Π² ΠΊΠΎΠ½ΡΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΈ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΊ Π½Π΅ΠΌΡ Π²ΡΠ·ΠΎΠ² ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°.
ΠΠ»ΠΎΡ ΠΎ:
class Car {
constructor() {
this.make = 'Honda';
this.model = 'Accord';
this.color = 'white';
}
setMake(make) {
this.make = make;
}
setModel(model) {
this.model = model;
}
setColor(color) {
this.color = color;
}
save() {
console.log(this.make, this.model, this.color);
}
}
const car = new Car();
car.setColor('pink');
car.setMake('Ford');
car.setModel('F-150');
car.save();
Π₯ΠΎΡΠΎΡΠΎ:
class Car {
constructor() {
this.make = 'Honda';
this.model = 'Accord';
this.color = 'white';
}
setMake(make) {
this.make = make;
// ΠΠ ΠΠΠΠ§ΠΠΠΠ: ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ this Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ
return this;
}
setModel(model) {
this.model = model;
// ΠΠ ΠΠΠΠ§ΠΠΠΠ: ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ this Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ
return this;
}
setColor(color) {
this.color = color;
// ΠΠ ΠΠΠΠ§ΠΠΠΠ: ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ this Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ
return this;
}
save() {
console.log(this.make, this.model, this.color);
// ΠΠ ΠΠΠΠ§ΠΠΠΠ: ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ this Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ
return this;
}
}
const car = new Car()
.setColor('pink')
.setMake('Ford')
.setModel('F-150')
.save();
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠ°ΠΊ Π²Π΅ΡΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠ΅Π½ΠΎ Π² Design Patterns ΠΏΠΎΠ΄ Π°Π²ΡΠΎΡΡΡΠ²ΠΎΠΌ ΠΠ°Π½Π΄Ρ Π§Π΅ΡΡΡΠ΅Ρ (Gang of Four), ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠ΄Π°Π²Π°ΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Ρ ΠΎΡΠΎΡΠΈΡ ΠΏΡΠΈΡΠΈΠ½ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Ρ ΠΎΡΠΎΡΠΈΡ ΠΏΡΠΈΡΠΈΠ½ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ. ΠΠ»Π°Π²Π½ΠΎΠ΅, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²Π°Ρ ΡΠΌ ΠΈΠ½ΡΡΠΈΠ½ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΠ΄Π΅Ρ ΠΏΡΡΠ΅ΠΌ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΠΏΠΎΡΠΎΠ±Π½Π° ΡΠ΅ΡΠΈΡΡ Π²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π»ΡΡΡΠ΅. Π ΡΡΠ΄Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ Π·Π°Π΄Π°Π΅ΡΠ΅ΡΡ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ: "ΠΠΎΠ³Π΄Π° Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅?". ΠΡΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½ΠΎ Π²ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΌΡΡΠ»Π°, ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ:
- ΠΠ°ΡΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ "ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡΡ", Π° Π½Π΅ "Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ" (Π§Π΅Π»ΠΎΠ²Π΅ΠΊ->ΠΠΈΠ²ΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΠΈΠ² ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ->ΠΠ΅ΡΠ°Π»ΠΈ_ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ).
- ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΈΠ· Π±Π°Π·ΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² (Π»ΡΠ΄ΠΈ ΠΌΠΎΠ³ΡΡ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΈ Π²ΡΠ΅ ΠΆΠΈΠ²ΠΎΡΠ½ΡΠ΅).
- ΠΡ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΊΠ»Π°ΡΡΠ°Ρ ΠΏΡΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Π° ΠΊΠ°Π»ΠΎΡΠΈΠΉ Π²ΡΠ΅Ρ ΠΆΠΈΠ²ΠΎΡΠ½ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ).
ΠΠ»ΠΎΡ ΠΎ:
class Employee {
constructor(name, email) {
this.name = name;
this.email = email;
}
// ...
}
// ΠΠ»ΠΎΡ
ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Employee (Π‘ΠΎΡΡΡΠ΄Π½ΠΈΠΊ) "ΠΈΠΌΠ΅Π΅Ρ" Π½Π°Π»ΠΎΠ³ΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
// EmployeeTaxData (ΠΠ°Π»ΠΎΠ³ΠΎΠ²ΡΠ΅_Π΄Π°Π½Π½ΡΠ΅_ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠ°) Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠΈΠΏΠΎΠΌ Employee (Π‘ΠΎΡΡΡΠ΄Π½ΠΈΠΊΠ°).
class EmployeeTaxData extends Employee {
constructor(ssn, salary) {
super();
this.ssn = ssn;
this.salary = salary;
}
// ...
}
Π₯ΠΎΡΠΎΡΠΎ:
class EmployeeTaxData {
constructor(ssn, salary) {
this.ssn = ssn;
this.salary = salary;
}
// ...
}
class Employee {
constructor(name, email) {
this.name = name;
this.email = email;
}
setTaxData(ssn, salary) {
this.taxData = new EmployeeTaxData(ssn, salary);
}
// ...
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π°ΠΆΠ½Π΅Π΅ Π΄Π΅ΠΏΠ»ΠΎΡ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π½Π΅Ρ ΡΠ΅ΡΡΠΎΠ² ΠΈΠ»ΠΈ ΠΈΡ ΠΌΠ°Π»ΠΎ, ΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ Π²ΡΠΊΠ»Π°Π΄ΠΊΠ΅ ΠΊΠΎΠ΄Π° Π½Π° Π±ΠΎΠ΅Π²ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Ρ Π²Π°Ρ Π½Π΅Ρ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎΡΡΠΈ, ΡΡΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠ»ΠΎΠΌΠ°Π»ΠΎΡΡ. Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΡΠΎΠ² ΠΎΡΡΠ°Π΅ΡΡΡ Π½Π° ΡΠΎΠ²Π΅ΡΡΠΈ Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π½ΠΎ 100% ΠΏΠΎΠΊΡΡΡΠΈΠ΅ ΡΠ΅ΡΡΠ°ΠΌΠΈ Π²ΡΠ΅Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π²ΡΡΠΎΠΊΠΎΠ΅ Π΄ΠΎΠ²Π΅ΡΠΈΠ΅ ΠΊ Π²Π°ΡΠ΅ΠΌΡ ΠΊΠΎΠ΄Ρ ΠΈ ΡΠΏΠΎΠΊΠΎΠΉΡΡΠ²ΠΈΠ΅ Π²ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². ΠΠ· ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ, ΡΡΠΎ Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΡΠ»ΠΈΡΠ½ΠΎΠΌΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΡ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΏΠΎΠΊΡΡΡΠΈΡ.
ΠΠ΅Ρ ΠΎΠΏΡΠ°Π²Π΄Π°Π½ΠΈΡ Π½Π΅ ΠΏΠΈΡΠ°ΡΡ ΡΠ΅ΡΡΡ. Π JavaScript cΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Ρ ΠΎΡΠΎΡΠΈΡ ΡΠ΅ΡΡΠΎΠ²ΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ², ΡΠ°ΠΊ ΡΡΠΎ Π½Π°ΠΉΠ΄ΠΈΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π΄Π»Ρ Π²Π°Ρ. Π ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΉΠ΄Π΅ΡΠ΅, ΡΠΎ ΡΡΡΠ΅ΠΌΠΈΡΠ΅ΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ ΡΠΈΡΠΈ ΠΈΠ»ΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠ°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (TDD), Π½ΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ Π»ΡΠ±ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ ΡΠΈΡΠΈ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π° ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π²Ρ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΠ΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΏΠΎΠΊΡΡΡΠΈΡ ΡΠ΅ΡΡΠ°ΠΌΠΈ.
ΠΠ»ΠΎΡ ΠΎ:
const assert = require('assert');
describe('MakeMomentJSGreatAgain', () => {
it('handles date boundaries', () => {
let date;
date = new MakeMomentJSGreatAgain('1/1/2015');
date.addDays(30);
assert.equal('1/31/2015', date);
date = new MakeMomentJSGreatAgain('2/1/2016');
date.addDays(28);
assert.equal('02/29/2016', date);
date = new MakeMomentJSGreatAgain('2/1/2015');
date.addDays(28);
assert.equal('03/01/2015', date);
});
});
Π₯ΠΎΡΠΎΡΠΎ:
const assert = require('assert');
describe('MakeMomentJSGreatAgain', () => {
it('handles 30-day months', () => {
const date = new MakeMomentJSGreatAgain('1/1/2015');
date.addDays(30);
assert.equal('1/31/2015', date);
});
it('handles leap year', () => {
const date = new MakeMomentJSGreatAgain('2/1/2016');
date.addDays(28);
assert.equal('02/29/2016', date);
});
it('handles non-leap year', () => {
const date = new MakeMomentJSGreatAgain('2/1/2015');
date.addDays(28);
assert.equal('03/01/2015', date);
});
});
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
Callback-ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡ ΡΠ΄ΡΠ°ΡΡ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΡΡΠ΅Π·ΠΌΠ΅ΡΠ½ΠΎΠΌΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΠΈ. Π ES2015/ES6 ΠΡΠΎΠΌΠΈΡΡ - Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΡΠΈΠΏ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΈΡ !
ΠΠ»ΠΎΡ ΠΎ:
require('request').get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin', (requestErr, response) => {
if (requestErr) {
console.error(requestErr);
} else {
require('fs').writeFile('article.html', response.body, (writeErr) => {
if (writeErr) {
console.error(writeErr);
} else {
console.log('File written');
}
});
}
});
Π₯ΠΎΡΠΎΡΠΎ:
require('request-promise').get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin')
.then((response) => {
return require('fs-promise').writeFile('article.html', response);
})
.then(() => {
console.log('File written');
})
.catch((err) => {
console.error(err);
});
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡΠΎΠΌΠΈΡΡ - ΠΎΡΠ΅Π½Ρ ΡΠΈΡΡΠ°Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° callback-ΡΡΠ½ΠΊΡΠΈΡΠΌ, Π½ΠΎ ES2017/ES8 ΠΏΡΠΈΠ²Π½ΠΎΡΠΈΡ async ΠΈ await Ρ Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΡΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΡΠ΅, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ async
, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΈΡΠ°ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ - Π±Π΅Π· ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ then
. ΠΡΠ»ΠΈ ΡΠΆΠ΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π½Π΅Π΄ΡΠΈΡΡ ΡΠΈΡΠΈ ES2017/ES8, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ async/await
!
ΠΠ»ΠΎΡ ΠΎ:
require('request-promise').get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin')
.then((response) => {
return require('fs-promise').writeFile('article.html', response);
})
.then(() => {
console.log('File written');
})
.catch((err) => {
console.error(err);
});
Π₯ΠΎΡΠΎΡΠΎ:
async function getCleanCodeArticle() {
try {
const response = await require('request-promise').get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin');
await require('fs-promise').writeFile('article.html', response);
console.log('File written');
} catch(err) {
console.error(err);
}
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡΠ±ΡΠΎΡΠ΅Π½Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ - ΠΎΡΠ»ΠΈΡΠ½Π°Ρ ΡΡΡΠΊΠ°! ΠΠ½ΠΈ ΠΎΠ·Π½Π°ΡΠ°ΡΡ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ, ΡΡΠΎ Π±ΡΠ»ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΈ Π΄ΠΎΠ½Π΅ΡΠ΅Π½ΠΎ Π΄ΠΎ Π²Π°Ρ ΠΏΡΡΠ΅ΠΌ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ±ΠΈΠΉΡΡΠ²Π° ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΡΡΠ΅ΠΊΠ°.
ΠΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠΉΠΌΠ°Π½Π½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅ Π΄Π°Π΅Ρ Π²Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΡΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° Π΅Π΅ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅. ΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ (console.log
) Π½Π΅ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡΡΡΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π·Π°ΡΠ°ΡΡΡΡ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ΅ΡΡΡΡΡΡ Π² ΠΌΠΎΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΡ
Π·Π°ΠΏΠΈΡΠ΅ΠΉ. ΠΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΡΡΠΊΠ° ΠΊΠΎΠ΄Π° Π² try/catch
ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π½Π° ΡΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠ»Π°Π½.
ΠΠ»ΠΎΡ ΠΎ:
try {
functionThatMightThrow();
} catch (error) {
console.log(error);
}
Π₯ΠΎΡΠΎΡΠΎ:
try {
functionThatMightThrow();
} catch (error) {
// ΠΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² (Π±ΠΎΠ»Π΅Π΅ Π½Π°Π²ΡΠ·ΡΠΈΠ²ΡΠΉ, ΡΠ΅ΠΌ console.log):
console.error(error);
// ΠΡΡΠ³ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ:
notifyUserOfError(error);
// ΠΡΡΠ³ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ:
reportErrorToService(error);
// ΠΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²ΡΠ΅ ΡΡΠΈ!
}
ΠΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΡΠΎΠΌΠΈΡΠ°Ρ
ΠΏΠΎ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΈΡΠΈΠ½Π΅, ΡΡΠΎ ΠΈ Π² try/catch
.
ΠΠ»ΠΎΡ ΠΎ:
getdata()
.then((data) => {
functionThatMightThrow(data);
})
.catch((error) => {
console.log(error);
});
Π₯ΠΎΡΠΎΡΠΎ:
getdata()
.then((data) => {
functionThatMightThrow(data);
})
.catch((error) => {
// ΠΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² (Π±ΠΎΠ»Π΅Π΅ Π½Π°Π²ΡΠ·ΡΠΈΠ²ΡΠΉ, ΡΠ΅ΠΌ console.log):
console.error(error);
// ΠΡΡΠ³ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ:
notifyUserOfError(error);
// ΠΡΡΠ³ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ:
reportErrorToService(error);
// ΠΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²ΡΠ΅ ΡΡΠΈ!
});
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
Π€ΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΠΎΡΠΈΡ ΡΡΠ±ΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ. ΠΠ°ΠΊ ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΡΠΎΠ±ΡΠ°Π½Π½ΠΎΠΌ Π·Π΄Π΅ΡΡ, Π² Π²ΠΎΠΏΡΠΎΡΠ΅ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅Ρ ΠΆΠ΅ΡΡΠΊΠΈΡ ΠΏΡΠ°Π²ΠΈΠ», ΠΊΠΎΡΠΎΡΡΠΌ Π²Ρ ΠΎΠ±ΡΠ·Π°Π½Ρ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ. ΠΠ»Π°Π²Π½ΠΎΠ΅, Π½Π΅ ΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π½Π° ΡΠΏΠΎΡΡ ΠΎ Π½Π΅ΠΌ. ΠΡΡΡ ΡΠΎΠ½Π½Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΠΎΠ΄ΠΈΠ½! Π‘ΠΏΠΎΡΡ ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ - ΠΏΡΡΡΠ°Ρ ΡΡΠ°ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π΅Π½Π΅Π³.
ΠΠ»Ρ ΡΠ»ΡΡΠ°Π΅Π², Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ (ΠΎΡΡΡΡΠΏΡ, ΡΠ°Π±ΡΠ»ΡΡΠΈΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ±Π΅Π»Ρ, Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ ΠΏΡΠΎΡΠΈΠ² ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΡΡ ΠΈ Ρ.Π΄.), Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π»ΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ.
JavaScript - Π½Π΅ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠ°ΠΏΠΈΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π³ΠΎΠ²ΠΎΡΠΈΡ Π²Π°ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΎ Π²Π°ΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΡΡΠ½ΠΊΡΠΈΡΡ ΠΈ Ρ.Π΄. ΠΡΠ°Π²ΠΈΠ»Π° Π½ΠΎΡΡΡ ΡΡΠ±ΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ, Π²Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ Π»ΡΠ±ΡΠ΅. ΠΠ»Π°Π²Π½ΠΎΠ΅, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²Ρ Π²ΡΠ±ΡΠ°Π»ΠΈ, Π±ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ.
ΠΠ»ΠΎΡ ΠΎ:
const DAYS_IN_WEEK = 7;
const daysInMonth = 30;
const songs = ['Back In Black', 'Stairway to Heaven', 'Hey Jude'];
const Artists = ['ACDC', 'Led Zeppelin', 'The Beatles'];
function eraseDatabase() {}
function restore_database() {}
class animal {}
class Alpaca {}
Π₯ΠΎΡΠΎΡΠΎ:
const DAYS_IN_WEEK = 7;
const DAYS_IN_MONTH = 30;
const songs = ['Back In Black', 'Stairway to Heaven', 'Hey Jude'];
const artists = ['ACDC', 'Led Zeppelin', 'The Beatles'];
function eraseDatabase() {}
function restoreDatabase() {}
class Animal {}
class Alpaca {}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π΄ΡΡΠ³ΡΡ, ΡΠΎΡ ΡΠ°Π½ΡΠΉΡΠ΅ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎ ΡΡΠ΄ΠΎΠΌ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅. Π ΠΈΠ΄Π΅Π°Π»Π΅, Π΄Π΅ΡΠΆΠΈΡΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΡΠΌΠΎ Π½Π°Π΄ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΉ. ΠΡ ΡΠΊΠ»ΠΎΠ½Π½Ρ ΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ ΡΠ²Π΅ΡΡ Ρ-Π²Π½ΠΈΠ·Ρ, ΠΊΠ°ΠΊ Π³Π°Π·Π΅ΡΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°ΠΉΡΠ΅ Π²Π°Ρ ΠΊΠΎΠ΄ Π΄Π»Ρ Π²ΠΎΡΠΏΡΠΈΡΡΠΈΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
ΠΠ»ΠΎΡ ΠΎ:
class PerformanceReview {
constructor(employee) {
this.employee = employee;
}
lookupPeers() {
return db.lookup(this.employee, 'peers');
}
lookupManager() {
return db.lookup(this.employee, 'manager');
}
getPeerReviews() {
const peers = this.lookupPeers();
// ...
}
perfReview() {
this.getPeerReviews();
this.getManagerReview();
this.getSelfReview();
}
getManagerReview() {
const manager = this.lookupManager();
}
getSelfReview() {
// ...
}
}
const review = new PerformanceReview(user);
review.perfReview();
Π₯ΠΎΡΠΎΡΠΎ:
class PerformanceReview {
constructor(employee) {
this.employee = employee;
}
perfReview() {
this.getPeerReviews();
this.getManagerReview();
this.getSelfReview();
}
getPeerReviews() {
const peers = this.lookupPeers();
// ...
}
lookupPeers() {
return db.lookup(this.employee, 'peers');
}
getManagerReview() {
const manager = this.lookupManager();
}
lookupManager() {
return db.lookup(this.employee, 'manager');
}
getSelfReview() {
// ...
}
}
const review = new PerformanceReview(employee);
review.perfReview();
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ - ΠΎΠΏΡΠ°Π²Π΄Π°Π½ΠΈΡ ΠΈ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Π₯ΠΎΡΠΎΡΠΈΠΉ ΠΊΠΎΠ΄ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΡΠ΅Ρ ΡΠ΅Π±Ρ ΡΠ°ΠΌ.
ΠΠ»ΠΎΡ ΠΎ:
function hashIt(data) {
// Π₯ΡΡ
let hash = 0;
// ΠΠ»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ
const length = data.length;
// Π¦ΠΈΠΊΠ» ΡΠ΅ΡΠ΅Π· ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π² Π΄Π°Π½Π½ΡΡ
for (let i = 0; i < length; i++) {
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠΎΠ΄ ΡΠΈΠΌΠ²ΠΎΠ»Π°
const char = data.charCodeAt(i);
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ
ΡΡ
hash = ((hash << 5) - hash) + char;
// ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ Π² 32-Π±ΠΈΡΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ
hash &= hash;
}
}
Π₯ΠΎΡΠΎΡΠΎ:
function hashIt(data) {
let hash = 0;
const length = data.length;
for (let i = 0; i < length; i++) {
const char = data.charCodeAt(i);
hash = ((hash << 5) - hash) + char;
// ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ Π² 32-Π±ΠΈΡΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ
hash &= hash;
}
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠ΅ ΠΎΡΡΠ°Π²Π»ΡΠΉΡΠ΅ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π² Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅
Π‘ΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π½Π΅ Π·ΡΡ. ΠΡΡΠ°Π²ΡΡΠ΅ ΡΡΠ°ΡΡΠΉ ΠΊΠΎΠ΄ Π² ΠΈΡΡΠΎΡΠΈΠΈ.
ΠΠ»ΠΎΡ ΠΎ:
doStuff();
// doOtherStuff();
// doSomeMoreStuff();
// doSoMuchStuff();
Π₯ΠΎΡΠΎΡΠΎ:
doStuff();
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠ΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ! ΠΠ΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² ΠΌΠ΅ΡΡΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅, Π·Π°ΠΊΠΎΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΆΡΡΠ½Π°Π»ΡΠ½ΡΡ
ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ git log
, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΡΡΠΎΡΠΈΡ!
ΠΠ»ΠΎΡ ΠΎ:
/**
Β * 2016-12-20: Π£Π΄Π°Π»Π΅Π½Ρ ΠΌΠΎΠ½Π°Π΄Ρ, Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π» ΠΈΡ
(RM)
Β * 2016-10-01: Π£Π»ΡΡΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ
ΠΌΠΎΠ½Π°Π΄Ρ (JP)
Β * 2016-02-03: ΠΡΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΏΠΎΠ² (LI)
Β * 2015-03-14: ΠΠΎΠ±Π°Π²Π»Π΅Π½ combine Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ ΡΠΈΠΏΠΎΠ² (JR)
Β */
function combine(a, b) {
return a + b;
}
Π₯ΠΎΡΠΎΡΠΎ:
function combine(a, b) {
return a + b;
}
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠ½ΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΡΠΌ. ΠΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌΠΈ ΠΎΡΡΡΡΠΏΠ°ΠΌΠΈ ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ΄Π°.
ΠΠ»ΠΎΡ ΠΎ:
////////////////////////////////////////////////////////////////////////////////
// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
////////////////////////////////////////////////////////////////////////////////
$scope.model = {
menu: 'foo',
nav: 'bar'
};
////////////////////////////////////////////////////////////////////////////////
// Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΊΡΠ΅Π½Π°
////////////////////////////////////////////////////////////////////////////////
const actions = function() {
// ...
};
Π₯ΠΎΡΠΎΡΠΎ:
$scope.model = {
menu: 'foo',
nav: 'bar'
};
const actions = function() {
// ...
};
β¬ ΠΠ°Π·Π°Π΄ ΠΊ Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ
ΠΠ°Π½Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ :
ΠΡΠ°Π·ΠΈΠ»ΡΡΠΊΠΈΠΉ ΠΏΠΎΡΡΡΠ³Π°Π»ΡΡΠΊΠΈΠΉ: fesnt/clean-code-javascript
ΠΠΈΡΠ°ΠΉΡΠΊΠΈΠΉ: alivebao/clean-code-js
ΠΠ΅ΠΌΠ΅ΡΠΊΠΈΠΉ: marcbruederlin/clean-code-javascript
ΠΠΎΡΠ΅ΠΉΡΠΊΠΈΠΉ: qkraudghgh/clean-code-javascript-ko