Ðдин из важнейÑÐ¸Ñ Ð¿ÑинÑипов ÐÐÐ â оÑделение внÑÑÑеннего инÑеÑÑейÑа Ð¾Ñ Ð²Ð½ÐµÑнего.
ÐÑо â обÑзаÑелÑÐ½Ð°Ñ Ð¿ÑакÑика в ÑазÑабоÑке Ñего Ñгодно Ñложнее hello world.
ЧÑÐ¾Ð±Ñ ÑÑо понÑÑÑ, оÑвлеÑÑмÑÑ Ð¾Ñ ÑазÑабоÑки и пеÑеведÑм взглÑд на обÑекÑÑ ÑеалÑного миÑа.
Ðак пÑавило, ÑÑÑÑойÑÑва, Ñ ÐºÐ¾ÑоÑÑми Ð¼Ñ Ð¸Ð¼ÐµÐµÐ¼ дело, веÑÑма ÑложнÑ. Ðо Ñазделение инÑеÑÑейÑа на внеÑний и внÑÑÑенний позволÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð¸Ñ Ð±ÐµÐ· малейÑÐ¸Ñ Ð¿Ñоблем.
ÐÑÐ¸Ð¼ÐµÑ Ð¸Ð· жизни
ÐапÑимеÑ, коÑеваÑка. ÐÑоÑÑÐ°Ñ ÑнаÑÑжи: кнопка, индикаÑоÑ, оÑвеÑÑÑиÑ,⦠Ð, конеÑно, ÑезÑлÑÑÐ°Ñ â коÑе :)
Ðо внÑÑÑи⦠(каÑÑинка из поÑÐ¾Ð±Ð¸Ñ Ð¿Ð¾ ÑемонÑÑ)
ÐаÑÑа деÑалей. Ðо Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ полÑзоваÑÑÑÑ ÐµÐ¹, ÑовеÑÑенно не Ð·Ð½Ð°Ñ Ð¾Ð± ÑÑом.
ÐоÑеваÑки â доволÑно-Ñаки надÑжнÑ, не пÑавда ли? Ðожно полÑзоваÑÑÑÑ Ð³Ð¾Ð´Ð°Ð¼Ð¸, и ÑолÑко когда ÑÑо-Ñо пойдÑÑ Ð½Ðµ Ñак â пÑидÑÑÑÑ Ð½ÐµÑÑи к маÑÑеÑÑ.
СекÑÐµÑ Ð½Ð°Ð´ÑжноÑÑи и пÑоÑÑоÑÑ ÐºÐ¾ÑеваÑки â в Ñом, ÑÑо вÑе деÑали оÑÐ»Ð°Ð¶ÐµÐ½Ñ Ð¸ ÑпÑÑÑÐ°Ð½Ñ Ð²Ð½ÑÑÑи.
ÐÑли ÑнÑÑÑ Ñ ÐºÐ¾ÑеваÑки заÑиÑнÑй кожÑÑ , Ñо иÑполÑзование ÐµÑ Ð±ÑÐ´ÐµÑ Ð±Ð¾Ð»ÐµÐµ ÑложнÑм (кÑда нажимаÑÑ?) и опаÑнÑм (Ñоком ÑдаÑиÑÑ Ð¼Ð¾Ð¶ÐµÑ).
Ðак Ð¼Ñ Ñвидим, обÑекÑÑ Ð¾ÑÐµÐ½Ñ ÑÑ Ð¾Ð¶Ð¸ Ñ ÐºÐ¾ÑеваÑками.
ТолÑко Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¿ÑÑÑаÑÑ Ð²Ð½ÑÑÑенние деÑали, иÑполÑзÑеÑÑÑ Ð½Ðµ кожÑÑ , а ÑпеÑиалÑнÑе ÑÑедÑÑва ÑзÑка и ÑоглаÑениÑ.
ÐнÑÑÑенний и внеÑний инÑеÑÑейÑ
РпÑогÑаммиÑовании Ð¼Ñ Ð±Ñдем ÑазделÑÑÑ Ð¼ÐµÑÐ¾Ð´Ñ Ð¸ ÑвойÑÑва обÑекÑа на две гÑÑппÑ:
- ÐнÑÑÑенний инÑеÑÑÐµÐ¹Ñ â ÑÑо ÑвойÑÑва и меÑодÑ, доÑÑÑп к коÑоÑÑм Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑÑÑеÑÑвлÑн ÑолÑко из дÑÑÐ³Ð¸Ñ Ð¼ÐµÑодов обÑекÑа, Ð¸Ñ Ñакже назÑваÑÑ Â«Ð¿ÑиваÑнÑми» (еÑÑÑ Ð¸ дÑÑгие ÑеÑминÑ, вÑÑÑеÑим Ð¸Ñ Ð´Ð°Ð»ÐµÐµ).
- ÐнеÑний инÑеÑÑÐµÐ¹Ñ â ÑÑо ÑвойÑÑва и меÑодÑ, доÑÑÑпнÑе ÑнаÑÑжи обÑекÑа, Ð¸Ñ Ð½Ð°Ð·ÑваÑÑ Â«Ð¿ÑблиÑнÑми».
ÐÑли пÑодолжиÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ Ñ ÐºÐ¾ÑеваÑкой â Ñо, ÑÑо ÑпÑÑÑано внÑÑÑи коÑеваÑки: ÑÑÑбка кипÑÑилÑника, нагÑеваÑелÑнÑй ÑлеменÑ, Ñепловой пÑÐµÐ´Ð¾Ñ ÑаниÑÐµÐ»Ñ Ð¸ Ñак далее â ÑÑо ÐµÑ Ð²Ð½ÑÑÑенний инÑеÑÑейÑ.
ÐнÑÑÑенний инÑеÑÑÐµÐ¹Ñ Ð¸ÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ ÑабоÑоÑпоÑобноÑÑи обÑекÑа, его деÑали иÑполÑзÑÑÑ Ð´ÑÑг дÑÑга. ÐапÑимеÑ, ÑÑÑбка кипÑÑилÑника подклÑÑена к нагÑеваÑелÑÐ½Ð¾Ð¼Ñ ÑлеменÑÑ.
Ðо ÑнаÑÑжи коÑеваÑка закÑÑÑа ÑпеÑиалÑнÑм кожÑÑ Ð¾Ð¼, ÑÑÐ¾Ð±Ñ Ð½Ð¸ÐºÑо к ним не подобÑалÑÑ. ÐеÑали ÑкÑÑÑÑ Ð¸ недоÑÑÑпнÑ. Ðиден лиÑÑ Ð²Ð½ÐµÑний инÑеÑÑейÑ.
ÐолÑÑив обÑекÑ, вÑÑ, ÑÑо нÑжно Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð¼ â ÑÑо знаÑÑ Ð²Ð½ÐµÑний инÑеÑÑейÑ. РвнÑÑÑеннем же знаÑÑ Ð²Ð¾Ð¾Ð±Ñе не обÑзаÑелÑно.
ÐÑо бÑли обÑие Ñлова по ÑеоÑии пÑогÑаммиÑованиÑ.
Ðалее Ð¼Ñ ÑеализÑем коÑеваÑÐºÑ Ð½Ð° JavaScript Ñ Ð¿ÑиваÑнÑми и пÑблиÑнÑми ÑвойÑÑвами. РкоÑеваÑке много деÑалей, Ð¼Ñ ÐºÐ¾Ð½ÐµÑно, не бÑдем моделиÑоваÑÑ ÐºÐ°Ð¶Ð´Ñй винÑик, а ÑоÑÑедоÑоÑимÑÑ Ð½Ð° оÑновнÑÑ Ð¿ÑиÑÐ¼Ð°Ñ ÑазÑабоÑки.
Шаг 1: пÑблиÑное и пÑиваÑное ÑвойÑÑво
ÐонÑÑÑÑкÑÐ¾Ñ ÐºÐ¾ÑеваÑок бÑÐ´ÐµÑ Ð½Ð°Ð·ÑваÑÑÑÑ CoffeeMachine.
function CoffeeMachine(power) {
this.waterAmount = 0; // колиÑеÑÑво Ð²Ð¾Ð´Ñ Ð² коÑеваÑке
alert( 'Создана коÑеваÑка моÑноÑÑÑÑ: ' + power + ' ваÑÑ' );
}
// ÑоздаÑÑ ÐºÐ¾ÑеваÑкÑ
var coffeeMachine = new CoffeeMachine(100);
// залиÑÑ Ð²Ð¾Ð´Ñ
coffeeMachine.waterAmount = 200;
ÐокалÑнÑе пеÑеменнÑе, вклÑÑÐ°Ñ Ð¿Ð°ÑамеÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑоÑа, можно ÑÑиÑаÑÑ Ð¿ÑиваÑнÑми ÑвойÑÑвами.
РпÑимеÑе вÑÑе ÑÑо power â моÑноÑÑÑ ÐºÐ¾ÑеваÑки, коÑоÑÐ°Ñ ÑказÑваеÑÑÑ Ð¿Ñи Ñоздании и далее бÑÐ´ÐµÑ Ð¸ÑполÑзована Ð´Ð»Ñ ÑаÑÑÑÑа вÑемени кипÑÑениÑ.
РлокалÑнÑм пеÑеменнÑм конÑÑÑÑкÑоÑа нелÑÐ·Ñ Ð¾Ð±ÑаÑиÑÑÑÑ ÑнаÑÑжи, но они доÑÑÑÐ¿Ð½Ñ Ð²Ð½ÑÑÑи Ñамого конÑÑÑÑкÑоÑа.
СвойÑÑва, запиÑаннÑе в this, можно ÑÑиÑаÑÑ Ð¿ÑблиÑнÑми.
ÐдеÑÑ ÑвойÑÑво waterAmount запиÑано в обÑекÑ, а знаÑÐ¸Ñ â доÑÑÑпно Ð´Ð»Ñ Ð¼Ð¾Ð´Ð¸ÑикаÑии ÑнаÑÑжи. Ðожно доливаÑÑ Ð¸ вÑливаÑÑ Ð²Ð¾Ð´Ñ Ð² лÑбом колиÑеÑÑве.
Ðалее Ð¼Ñ Ð±Ñдем назÑваÑÑ power как «локалÑной пеÑеменной», Ñак и «пÑиваÑнÑм ÑвойÑÑвом» обÑекÑа.
ÐÑо, ÑмоÑÑÑ, Ñ ÐºÐ°ÐºÐ¾Ð¹ ÑÑоÑÐ¾Ð½Ñ Ð¿Ð¾ÑмоÑÑеÑÑ.
ТеÑÐ¼Ð¸Ð½Ñ Â«Ð¿ÑиваÑное ÑвойÑÑво/меÑод», «пÑблиÑное ÑвойÑÑво/меÑод» оÑноÑÑÑÑÑ Ðº обÑей ÑеоÑии ÐÐÐ. Ð Ð¸Ñ ÐºÐ¾Ð½ÐºÑеÑÐ½Ð°Ñ ÑеализаÑÐ¸Ñ Ð² ÑзÑке пÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑазлиÑной.
ÐдеÑÑ ÐÐÐ-пÑинÑип «пÑиваÑного ÑвойÑÑва» Ñеализован ÑеÑез локалÑнÑе пеÑеменнÑе, поÑÑÐ¾Ð¼Ñ Ð¸ «локалÑÐ½Ð°Ñ Ð¿ÐµÑеменнаÑ» и «пÑиваÑное ÑвойÑÑво» â пÑавилÑнÑе ÑеÑминÑ, в завиÑимоÑÑи Ð¾Ñ Ñого, Ñ ÐºÐ°ÐºÐ¾Ð¹ ÑоÑки зÑÐµÐ½Ð¸Ñ Ð²Ð·Ð³Ð»ÑнÑÑÑ â кода или аÑÑ Ð¸ÑекÑÑÑÑ ÐÐÐ.
Шаг 2: пÑблиÑнÑй и пÑиваÑнÑй меÑодÑ
Ðобавим пÑблиÑнÑй меÑод run, запÑÑкаÑÑий коÑеваÑкÑ, а Ñакже вÑпомогаÑелÑнÑе внÑÑÑенние меÑÐ¾Ð´Ñ getBoilTime и onReady:
function CoffeeMachine(power) {
this.waterAmount = 0;
// ÑаÑÑÑÑ Ð²Ñемени Ð´Ð»Ñ ÐºÐ¸Ð¿ÑÑениÑ
function getBoilTime() {
return 1000; // ÑоÑÐ½Ð°Ñ ÑоÑмÑла ÑаÑÑÑÑа бÑÐ´ÐµÑ Ð¿Ð¾Ð·Ð¶Ðµ
}
// ÑÑо делаÑÑ Ð¿Ð¾ оконÑании пÑоÑеÑÑа
function onReady() {
alert( 'ÐоÑе гоÑов!' );
}
this.run = function() {
// setTimeout - вÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ ÑÑнкÑиÑ,
// она запÑÑÑÐ¸Ñ onReady ÑеÑез getBoilTime() миллиÑекÑнд
setTimeout(onReady, getBoilTime());
};
}
var coffeeMachine = new CoffeeMachine(100);
coffeeMachine.waterAmount = 200;
coffeeMachine.run();
ÐÑиваÑнÑе меÑодÑ, Ñакие как onReady, getBoilTime могÑÑ Ð±ÑÑÑ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ñ ÐºÐ°Ðº вложеннÑе ÑÑнкÑии.
Ð ÑезÑлÑÑаÑе еÑÑеÑÑвеннÑм обÑазом полÑÑаеÑÑÑ, ÑÑо доÑÑÑп к ним (ÑеÑез замÑкание) имеÑÑ ÑолÑко дÑÑгие ÑÑнкÑии, обÑÑвленнÑе в Ñом же конÑÑÑÑкÑоÑе.
Шаг 3: конÑÑанÑа
ÐÐ»Ñ ÑаÑÑÑÑа вÑемени на кипÑÑение Ð²Ð¾Ð´Ñ Ð¸ÑполÑзÑеÑÑÑ ÑоÑмÑла c*m*ÎT / power, где:
câ коÑÑÑиÑÐ¸ÐµÐ½Ñ ÑеплоÑмкоÑÑи водÑ, ÑизиÑеÑÐºÐ°Ñ ÐºÐ¾Ð½ÑÑанÑа ÑавнаÑ4200.mâ маÑÑа водÑ, коÑоÑÑÑ Ð½Ñжно нагÑеÑÑ.ÎTâ ÑемпеÑаÑÑÑа, на коÑоÑÑÑ Ð½Ñжно подогÑеÑÑ, бÑдем ÑÑиÑаÑÑ, ÑÑо изнаÑалÑно вода â комнаÑной ÑемпеÑаÑÑÑÑ 20°С, Ñо еÑÑÑ Ð´Ð¾ 100° нÑжно гÑеÑÑ Ð½Ð°ÎT=80.powerâ моÑноÑÑÑ.
ÐÑполÑзÑем ÐµÑ Ð² более ÑеалиÑÑиÑном ваÑианÑе getBoilTime(), вклÑÑаÑÑем иÑполÑзование пÑиваÑнÑÑ
ÑвойÑÑв и конÑÑанÑÑ:
"use strict"
function CoffeeMachine(power) {
this.waterAmount = 0;
// ÑизиÑеÑÐºÐ°Ñ ÐºÐ¾Ð½ÑÑанÑа - ÑделÑÐ½Ð°Ñ ÑеплоÑмкоÑÑÑ Ð²Ð¾Ð´Ñ Ð´Ð»Ñ getBoilTime
var WATER_HEAT_CAPACITY = 4200;
// ÑаÑÑÑÑ Ð²Ñемени Ð´Ð»Ñ ÐºÐ¸Ð¿ÑÑениÑ
function getBoilTime() {
return this.waterAmount * WATER_HEAT_CAPACITY * 80 / power; // оÑибка!
}
// ÑÑо делаÑÑ Ð¿Ð¾ оконÑании пÑоÑеÑÑа
function onReady() {
alert( 'ÐоÑе гоÑов!' );
}
this.run = function() {
setTimeout(onReady, getBoilTime());
};
}
var coffeeMachine = new CoffeeMachine(1000);
coffeeMachine.waterAmount = 200;
coffeeMachine.run();
УделÑÐ½Ð°Ñ ÑеплоÑмкоÑÑÑ WATER_HEAT_CAPACITY вÑделена болÑÑими бÑквами, Ñак как ÑÑо конÑÑанÑа.
Ðнимание, пÑи запÑÑке кода вÑÑе в меÑоде getBoilTime бÑÐ´ÐµÑ Ð¾Ñибка. Ðак Ð²Ñ Ð´ÑмаеÑе, поÑемÑ?
Шаг 4: доÑÑÑп к обÑекÑÑ Ð¸Ð· внÑÑÑеннего меÑода
ÐнÑÑÑенний меÑод вÑзÑваеÑÑÑ Ñак: getBoilTime(). Ð ÑÐµÐ¼Ñ Ð¿Ñи ÑÑом Ñавен this?⦠Ðак Ð²Ñ Ð½Ð°Ð²ÐµÑнÑка помниÑе, в ÑовÑеменном ÑÑандаÑÑе он бÑÐ´ÐµÑ undefined (в ÑÑаÑом â window), из-за ÑÑого пÑи ÑÑении this.waterAmount Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÐµÑ Ð¾Ñибка!
ÐÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑеÑиÑÑ, еÑли вÑзваÑÑ getBoilTime Ñ ÑвнÑм Ñказанием конÑекÑÑа: getBoilTime.call(this):
function CoffeeMachine(power) {
this.waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
function getBoilTime() {
return this.waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
function onReady() {
alert( 'ÐоÑе гоÑов!' );
}
this.run = function() {
setTimeout(onReady, getBoilTime.call(this));
};
}
// ÑÐ¾Ð·Ð´Ð°Ñ ÐºÐ¾ÑеваÑкÑ, моÑноÑÑÑÑ 100000W ÑÑÐ¾Ð±Ñ ÐºÐ¸Ð¿ÑÑила бÑÑÑÑо
var coffeeMachine = new CoffeeMachine(100000);
coffeeMachine.waterAmount = 200;
coffeeMachine.run();
Такой подÑ
од бÑÐ´ÐµÑ ÑабоÑаÑÑ, но он не оÑенÑ-Ñо Ñдобен. ÐÐµÐ´Ñ Ð¿Ð¾Ð»ÑÑаеÑÑÑ, ÑÑо ÑепеÑÑ Ð²ÐµÐ·Ð´Ðµ, где Ð¼Ñ Ñ
оÑим вÑзваÑÑ getBoilTime, нÑжно Ñвно ÑказÑваÑÑ ÐºÐ¾Ð½ÑекÑÑ, Ñ.е. пиÑаÑÑ getBoilTime.call(this).
Ð ÑÑаÑÑÑÑ ÑÑÑеÑÑвÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑлеганÑнÑе ÑеÑениÑ.
ÐÑивÑзка ÑеÑез bind
Ðожно пÑи обÑÑвлении пÑивÑзаÑÑ getBoilTime к обÑекÑÑ ÑеÑез bind, Ñогда вопÑÐ¾Ñ ÐºÐ¾Ð½ÑекÑÑа оÑпадÑÑ Ñам Ñобой:
function CoffeeMachine(power) {
this.waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
var getBoilTime = function() {
return this.waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}.bind(this);
function onReady() {
alert( 'ÐоÑе гоÑов!' );
}
this.run = function() {
setTimeout(onReady, getBoilTime());
};
}
var coffeeMachine = new CoffeeMachine(100000);
coffeeMachine.waterAmount = 200;
coffeeMachine.run();
ÐÑо ÑеÑение бÑÐ´ÐµÑ ÑабоÑаÑÑ, ÑепеÑÑ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ пÑоÑÑо вÑзÑваÑÑ Ð±ÐµÐ· call. Ðо обÑÑвление ÑÑнкÑии ÑÑало менее кÑаÑивÑм.
Ð¡Ð¾Ñ Ñанение this в замÑкании
ÐожалÑй, ÑамÑй ÑдобнÑй и ÑаÑÑо пÑименÑемÑй пÑÑÑ ÑеÑÐµÐ½Ð¸Ñ ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑÐ¾Ð±Ñ Ð¿ÑедваÑиÑелÑно ÑкопиÑоваÑÑ this во вÑпомогаÑелÑнÑÑ Ð¿ÐµÑеменнÑÑ Ð¸ обÑаÑаÑÑÑÑ Ð¸Ð· внÑÑÑенниÑ
ÑÑнкÑий Ñже к ней.
ÐÐ¾Ñ Ñак:
function CoffeeMachine(power) {
this.waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
var self = this;
function getBoilTime() {
return self.waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
function onReady() {
alert( 'ÐоÑе гоÑов!' );
}
this.run = function() {
setTimeout(onReady, getBoilTime());
};
}
var coffeeMachine = new CoffeeMachine(100000);
coffeeMachine.waterAmount = 200;
coffeeMachine.run();
ТепеÑÑ getBoilTime полÑÑÐ°ÐµÑ self из замÑканиÑ.
ÐонеÑно, ÑÑÐ¾Ð±Ñ ÑÑо ÑабоÑало, Ð¼Ñ Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ self, а вÑе пÑиваÑнÑе меÑодÑ, коÑоÑÑе Ñ
оÑÑÑ Ð¸Ð¼ÐµÑÑ Ð´Ð¾ÑÑÑп к ÑекÑÑÐµÐ¼Ñ Ð¾Ð±ÑекÑÑ, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸ÑполÑзоваÑÑ Ð²Ð½ÑÑÑи ÑÐµÐ±Ñ self вмеÑÑо this.
ÐмеÑÑо self можно иÑполÑзоваÑÑ Ð»Ñбое дÑÑгое Ð¸Ð¼Ñ Ð¿ÐµÑеменной, напÑÐ¸Ð¼ÐµÑ var me = this.
ÐÑого
ÐÑак, Ð¼Ñ Ñделали коÑеваÑÐºÑ Ñ Ð¿ÑблиÑнÑми и пÑиваÑнÑми меÑодами и заÑÑавили Ð¸Ñ ÐºÐ¾ÑÑекÑно ÑабоÑаÑÑ.
Ð ÑеÑминологии ÐÐРоÑделение и заÑиÑа внÑÑÑеннего инÑеÑÑейÑа назÑваеÑÑÑ Ð¸Ð½ÐºÐ°Ð¿ÑÑлÑÑиÑ.
ÐÑаÑко пеÑеÑиÑлим бонÑÑÑ, коÑоÑÑе она даÑÑ:
- ÐаÑиÑа полÑзоваÑелей Ð¾Ñ Ð²ÑÑÑÑела Ñебе в ногÑ
-
ÐÑедÑÑавÑÑе, команда ÑазÑабоÑÑиков полÑзÑеÑÑÑ ÐºÐ¾ÑеваÑкой. ÐоÑеваÑка Ñоздана ÑиÑмой «ÐÑÑÑие ÐоÑеваÑки» и, в обÑем, ÑабоÑÐ°ÐµÑ Ñ Ð¾ÑоÑо, но Ñ Ð½ÐµÑ ÑнÑли заÑиÑнÑй кожÑÑ Ð¸, Ñаким обÑазом, внÑÑÑенний инÑеÑÑÐµÐ¹Ñ ÑÑал доÑÑÑпен.
ÐÑе ÑазÑабоÑÑики ÑÐ¸Ð²Ð¸Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ñ â и полÑзÑÑÑÑÑ ÐºÐ¾ÑеваÑкой как обÑÑно. Ðо Ñ Ð¸ÑÑÑй ÐаÑÑ ÑеÑил, ÑÑо он ÑамÑй ÑмнÑй, и подкÑÑÑил кое-ÑÑо внÑÑÑи коÑеваÑки, ÑÑÐ¾Ð±Ñ ÐºÐ¾Ñе заваÑивалÑÑ Ð¿Ð¾ÐºÑепÑе. ÐаÑÑ Ð½Ðµ знал, ÑÑо Ñе изменениÑ, коÑоÑÑе он пÑоизвÑл, пÑиведÑÑ Ðº ÑомÑ, ÑÑо коÑеваÑка иÑпоÑÑиÑÑÑ ÑеÑез два днÑ.
ÐиноваÑ, ÑазÑмееÑÑÑ, не ÑолÑко ÐаÑÑ, но и ÑоÑ, кÑо ÑнÑл заÑиÑнÑй кожÑÑ Ñ ÐºÐ¾ÑеваÑки, и Ñем ÑамÑм позволил ÐаÑе пÑоводиÑÑ Ð¼Ð°Ð½Ð¸Ð¿ÑлÑÑии.
РпÑогÑаммиÑовании â Ñо же Ñамое. ÐÑли полÑзоваÑÐµÐ»Ñ Ð¾Ð±ÑекÑа бÑÐ´ÐµÑ Ð¼ÐµÐ½ÑÑÑ Ñо, ÑÑо не ÑаÑÑÑиÑано на изменение ÑнаÑÑжи â поÑледÑÑÐ²Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð½ÐµÐ¿ÑедÑказÑемÑми.
- УдобÑÑво в поддеÑжке
-
СиÑÑаÑÐ¸Ñ Ð² пÑогÑаммиÑовании Ñложнее, Ñем Ñ ÐºÐ¾ÑеваÑкой, Ñ.к. коÑеваÑÐºÑ Ð¾Ð´Ð¸Ð½ Ñаз кÑпили и вÑÑ, а пÑогÑамма Ð¼Ð¾Ð¶ÐµÑ ÑлÑÑÑаÑÑÑÑ Ð¸ доÑабаÑÑваÑÑÑÑ.
ÐÑи налиÑии ÑÑÑко вÑделенного внеÑнего инÑеÑÑейÑа, ÑазÑабоÑÑик Ð¼Ð¾Ð¶ÐµÑ Ñвободно менÑÑÑ Ð²Ð½ÑÑÑенние ÑвойÑÑва и меÑодÑ, без оглÑдки на коллег.
ÐоÑаздо легÑе ÑазÑабаÑÑваÑÑ, еÑли знаеÑÑ, ÑÑо ÑÑд меÑодов (вÑе внÑÑÑенние) можно пеÑеименовÑваÑÑ, менÑÑÑ Ð¸Ñ Ð¿Ð°ÑамеÑÑÑ, и вообÑе, пеÑепиÑаÑÑ ÐºÐ°Ðº Ñгодно, Ñак как внеÑний код к ним абÑолÑÑно ÑоÑно не обÑаÑаеÑÑÑ.
ÐлижайÑÐ°Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ Ð² ÑеалÑной жизни â ÑÑо когда вÑÑ Ð¾Ð´Ð¸Ñ Â«Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑÑиÑ» коÑеваÑки, коÑоÑÐ°Ñ ÑабоÑÐ°ÐµÑ Ð³Ð¾Ñаздо лÑÑÑе. РазÑабоÑÑик мог пеÑеделаÑÑ Ð²ÑÑ Ð²Ð½ÑÑÑи, но полÑзоваÑÑÑÑ ÐµÐ¹ по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¿ÑоÑÑо, Ñак как внеÑний инÑеÑÑÐµÐ¹Ñ ÑÐ¾Ñ ÑанÑн.
- УпÑавление ÑложноÑÑÑÑ
-
ÐÑди обожаÑÑ Ð¿Ð¾Ð»ÑзоваÑÑÑÑ Ð²ÐµÑами, коÑоÑÑе пÑоÑÑÑ Ñ Ð²Ð¸Ð´Ñ. Ð ÑÑо внÑÑÑи â дело деÑÑÑое.
ÐÑогÑаммиÑÑÑ Ð·Ð´ÐµÑÑ Ð½Ðµ иÑклÑÑение.
ÐÑегда Ñдобно, когда деÑали ÑеализаÑии ÑкÑÑÑÑ, и доÑÑÑпен пÑоÑÑой, понÑÑно докÑменÑиÑованнÑй внеÑний инÑеÑÑейÑ.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)