Кодиране ужас
програмиране и човешки фактори
Редовни изрази: сега имате два проблема
Обичам редовни изрази. Не, не съм сигурен, че разбирате: аз наистина обичам редовни изрази.
Може да ви се стори малко странно, че хак, който е израснал, използвайки език с ключовата дума ain't, ще се влюби така, че да се влюби в нещо толкова тъпо и тайнствено, колкото обикновените изрази. Не съм сигурен как става това. Но го прави. Редовните изрази скачат. Те трябва абсолютно да бъдат ключова част от инструментариума на всеки съвременен кодер.
Ако някога сте говорили за редовните изрази с друг програмист, неизменно сте чували този кестен от 1997 г.:
Някои хора, когато се сблъскат с проблем, мислят «Знам, ще използвам регулярни изрази.» Сега те имат два проблема.
Цитатът е от Джейми Завински, хакер от световна класа, на когото много се възхищавам. Ако ни казва да не използваме регулярни изрази, трябва ли дори да се притесняваме? Може би, ако живеете и умирате от саундбайтове. Но има малко повече от историята от това, както е видно от изчерпателните изследвания на Джефри Фрид върху цитата на Завински. Самият Завински го коментира. Анализирайки пълния текст на публикациите на Джейми в оригиналната тема от 1997 г., откриваме следното:
Природата на Perl насърчава използването на регулярни изрази почти до изключване на всички останали техники; те са далеч и най-очевидният (поне за хората, които не знаят по-добър) начин да стигнат от точка А до точка Б.
Първият цитат е твърде глиб, за да бъде взет на сериозно. Но това, напълно съм съгласен. Ето точката, която Джейми се опитваше да направи: не че регулярните изрази са зли, сами по себе си, но това, че прекаляването с правилните изрази е зло.
Не можех да се съглася повече. Редовните изрази са като особено пикантен лют сос - да се използва умерено и сдържано, само когато е подходящо. Трябва ли да се опитате да решите всеки проблем, който срещате с редовен израз? Е, не. Тогава ще пишете Perl и не съм сигурен, че имате нужда от такива главоболия. Ако намокрите чинията си в лют сос, по-късно ще бъдете много, много съжалявам.
По същия начин, който от време на време не мога да си представя храна без тиква лют сос, не мога да си представя програмиране без случайни редовни изрази. Това би било странно, неудовлетворително изживяване.
Но почакай! Нека позная! Последният път, когато трябваше да прочетете редовен израз и да го разберете, главата ви почти избухна! Защо, дори не беше код; това беше просто куп неразбираем шум от линия Q * Bert!
Успокой се. Поеми си дълбоко въздух. Отпуснете се.
Позволете ми да бъда много ясен по този въпрос: Ако прочетете невероятно сложен, невъзможен за дешифриране редовен израз във вашата кодова база, те направиха грешно . Ако пишете редовни изрази, които са трудни за четене във вашата кодова база, правите грешно .
Виж. Трудно е да пишеш така, че хората да те разберат. Не ме интересува дали е код, английски език, редовни изрази или клингон. Каквото и да е, мога да ви покажа пример на някой, който е написал нещо, което е почти неразличимо от дрънкането в него. Мога да ви покажа и нещо, написано в същата среда, която е толкова красива, че ще направи очите ви водни. Така че аргументът, според който регулярните изрази са някак фундаментално невъзможни за писане или четене, за мен не оправдава. Както всичко останало, просто е необходима умение за умения.
Вдигни се, войнико. Дори Ruby код е трудно да се чете, докато не научите символите и ключовите думи, които изграждат езика. Ако можете да се научите да четете код на какъвто и да е език, който сте избрали, можете абсолютно да се справите с четенето на няколко регулярни израза. Просто не е толкова трудно. Няма да ви отегчавам с пълно обяснение на десетката или толкова основни елементи от правилните изрази; Майк вече покри тази земя по-добре, отколкото мога:
Бих искал да илюстрирам с действителен пример, редовен израз, който наскоро написах, за да извадя опасен HTML от въвеждането. Това се извлича от рутината SanitizeHtml, която публикувах в RefactorMyCode.
Какво виждате тук? Списъкът с променливи имена е силен намек. Едно нещо, което харесвам при обикновените изрази, е, че те обикновено изглеждат като това, което съвпадат. Виждате списък с HTML маркери, нали? Може би със и без техните затварящи маркери?
Честно казано, толкова трудно ли е да се разбере? За мен това е напълно четимо. Но можем да се справим по-добре. В повечето съвременни регекс диалекти можете да включите режим, при който бялото пространство вече не е значително. Това ви освобождава да използвате бяло пространство и коментари в редовния си израз, както е така.
Разбираш ли го сега? Всичко, което направих, беше да добавя малко коментари и много празно пространство. Същата точна техника, която бих използвал във всеки код, наистина.
Но как готвих този редовен израз? Как да разбера, че прави това, което мисля, че прави? Как да го тествам? Е, отново, постъпвам по същия начин, както и с другия си код: Използвам инструмент. Моят инструмент за избор е RegexBuddy.
Сега получаваме подчертаване на синтаксиса и по-важното - показване в реално време на съвпадения там в дъното в нашите тестови данни, докато пишем. Това е огромно. Ако се чудите защо вашият IDE не прави това автоматично за вас с низове от регекс, които открива във вашия код, кажете ми за него. Чудя се на същото това нещо от години.
По моя преценка RegexBuddy е далеч най-добрият инструмент за генериране. Нищо друго дори не се приближава. Но това струва пари. Ако не използвате софтуер, който струва пари, има много алтернативи. Не бихте прочели или написали код в бележника, нали? Тогава защо по света бихте се опитвали да четете или пишете редовни изрази по този начин? Преди да се оплаквате колко трудно се справят правилните изрази, намерете правилните инструменти!
Тази неприятност си заслужава, защото редовните изрази са невероятно мощни и кратки. Колко мощни? Успях да напиша безсмислица, HTML дезинтеризатор със специално предназначение в около 25 реда код и четири редовни израза. Сравнете това с обща цел HTML дезинтеризатор, който би отнел стотици, ако не и хиляди реда от процедурен код, за да направи същото.
Имам обаче няколко съвета за запазване на здравината ви, докато се занимавате с редовни изрази:
- Не се опитвайте да правите всичко в един uber-regex. Знам, че можете да го направите по този начин, но няма да го направите. Не си струва. Разбийте операцията надолу на няколко по-малки, по-разбираеми регулярни изрази и прилагайте всеки на свой ред. Никой няма да може да разбере или отстрани грешката в това чудовищно 20-редови регекс, но може просто да има шанс за борба при разбиране и отстраняване на грешки в пет мини регекса.
Използвайте бяло пространство и коментари. Вече не е 1997 година. Малък ултракондензиран регекс вече не е добродетел. Обърнете се към опцията IgnorePatternWhitespace, след което използвайте това бяло пространство, за да улесните вашия регекс за хората, за да ги разберем и разберем. Коментирайте либерално.
Вземете инструмент за редовно изразяване Не се взирам в редовните изрази и се опитвам да извадя значението им чрез чиста сила на волята. Нито пък вие. Това е загуба на време. Поставям ги в моя инструмент за регексиране по избор, RegexBuddy, който не само ми казва какво прави редовното изражение, но ми позволява да премина през него и да го пусна през някои тестови данни. Всичко в реално време, докато пишем.
Ако се страхувате от редовни изрази, не бъдете. Започнете с малки. Използвани отговорно и с правилния инструментариум те са големи, мощни - смея да кажа, пикантни - печели. Ако направите редовни изрази част от инструментариума си, ще можете да напишете по-малко код, който прави повече. Просто .. вкус тесто.
Може да им се насладите толкова много, всъщност, че напълно забравяте за този "втори проблем".
Сега ще сте двама
Нов жив превод
И Господ й каза: Синовете в твоята утроба ще станат два народа. От самото начало двете нации ще бъдат съперници. Една нация ще бъде по-силна от другата; и по-големият ти син ще служи на по-малкия ти син. "
Berean Study Bible
и той й заяви: „Два народа са в утробата ви и два народа от вас ще бъдат разделени; един народ ще бъде по-силен от другия, а по-възрастният ще служи на по-младите. ”
Съвременна английска версия
и той й каза: «Вашите двама сина ще станат два отделни народа. По-малкият от двамата ще бъде по-силен, а по-големият син ще бъде негов слуга. »
Международна стандартна версия
„Два народа са в утробата ви“, отговори Господ, „и два отделни народа ще се появят. Един народ ще бъде по-силният, а по-възрастният ще служи на по-младите. »
Буквален превод на Йънг
И Йехова й казва: Два народа са в утробата ти и два народа от червата ти се разделиха; и един народ, отколкото другите хора, е по-силен; и по-възрастният служи на по-младите.
Римляни 9:12
не чрез дела, а от Този, който призовава, й беше казано: «По-възрастните ще служат на по-младите.»
Битие 17: 4
«Що се отнася до Мен, това е Моят завет с вас: Вие ще бъдете баща на много народи.
Битие 17:16
И аз ще я благословя и със сигурност ще ти дам син от нея. Ще я благословя и тя ще бъде майка на народите; царе на народите ще слязат от нея. »
Битие 25:24
Когато дойде времето й да роди, в утробата й наистина имаше близнаци.
Битие 27:29
Нека народите ви служат, а нациите да се поклонят пред вас. Нека бъдете господар на братята си и нека синовете на майка ви да се поклонят пред вас. Нека бъдат проклети тези, които ви проклинат, и тези, които ви благословят. »
Битие 27:33
Исак започна да трепери бурно и да>
Битие 27:40
Ще живееш от меча и ще служиш на брат си. Но когато се разбунтувате, ще откъснете игото му от врата си. »
Числа 20:14
От Кадеш Мойсей изпрати пратеници да кажат на едомския цар: «Ето това казва вашият брат Израел: Вие знаете цялата мъка, която ни сполетя,
Второзаконие 2: 4
и заповядайте на хората: „Ще преминете през територията на братята си, потомците на Исав, които живеят в Сеир. Те ще бъдат afra>
Второзаконие 2: 8
И така минавахме покрай нашите братя, потомците на Исав, които живеят в Сеир. Отбихме се от пътя Араба, който идва от Елат и Езион-гебер, и пътувахме по пътя на Моавската пустиня.
Малахия 1: 2
«Обичах те», казва Господ. Но вие питате: «Как ни обичахте?» «Не беше ли брат на Исав Яков?», Заявява Господ. «И все пак Яков съм обичал,
Малахия 1: 3
но Исав мразех и превърнах планините му в пустош и оставих наследството му на пустинните чакали. »
И ГОСПОД й каза: Два народа са в утробата ти и два народа ще бъдат отделени от червата ти; и един народ ще бъде по-силен от другия народ; и по-възрастният ще служи на по-младия.
Битие 17:16 И ще я благословя и ще ти дам и син от нея; да, аз ще я благословя и тя ще бъде майка на народите; царе на хората ще бъдат от нея.
Битие 24:60 И те благословиха Ревека и й казаха: Ти си сестра ни, бъди майка на хиляди милиони и нека семето ти да завладее портата на онези, които ги мразят.
Genesis 25:27 27 И момчетата пораснаха; и Исав беше хитър ловец, човек от полето; а Яков беше обикновен човек, обитаващ палатки.
Genesis 32: 6 И пратениците се върнаха при Яков и казаха: Дойдохме при брат ти Исав и той отиде да се срещне с теб и четиристотин мъже с него.
Genesis 33: 3 И той премина пред тях и се поклони на земята седем пъти, докато не се приближи до брат си.
Битие 27: 29, 40 Нека хората ви служат и народите да се поклонят пред вас: бъдете господар над братята си и нека се поклонят синовете на вашата майка пред вас; проклет всеки, който ви прокълне, и благословен този, който ви благославя ...
2 Самуил 8:14 И постави гарнизони в Едом; из целия Едом постави гарнизони и всички от Едом станаха слуги на Давид. И Господ запази Давид, където и да отиде.
1 Царе 22:47 Тогава в Едом нямаше цар: заместник беше цар.
и той]
יְהוָ֜ה (Yah · weh)
Съществително - правилно - мъжки род единствено число
Еврейски 3068 на Силни: Господ - правилното име на Израилевия Бог
обявен
לָ֗הּ (lāh)
Предложение | трето лице женствено единствено число
Иврит на Стронг
на нея:
וַיֹּ֨אמֶר (начин · yō · mer)
Съединителна уау | Глагол - Qal - Последователно несъвършено - мъжко единствено число на трето лице
Еврейски 559 на Strong: За да изречем, кажете
"Двама
שְׁנֵ֤י (šə · nê)
Номер - mdc
Еврейски 8147 на Strong: Двама (кардинал)
народи
ִם֙וֹיִם֙ (ḡō · w · yim)
Съществително име - мъжки род множествено число
Иврит на Strong's 1471: Чужда нация, езичник, войска от животни, полет на скакалци
са в утробата ти,
בְּבִטְנֵ֔ךְ (bə · ḇiṭ · nêḵ)
Предложение-b | Съществително - женствено единствено число | второ лице женствено единствено число
Еврейски 990 на Strong's: коремът, утробата, пазвата, тялото на всичко
и две
וּשְׁנֵ֣י (ū · šə · nê)
Съединителна уау | Номер - mdc
Еврейски 8147 на Strong: Двама (кардинал)
народи
לְאֻמִּ֔ים (lə · 'um · mîm)
Съществително име - мъжки род множествено число
Еврейски 3816 на Стронг: Общност
отвътре във вас
מִמֵּעַ֖יִךְ (mim · mê · 'a · yiḵ)
Предложение-м | Съществително име - мъжки род множествено число | второ лице женствено единствено число
Еврейски на Стронг 4578: Червата, корема, симпатия, жилетка, стомахът, матката, сърцето
ще бъдат разделени;
יִפָּרֵ֑דוּ (yip · pā · rê · ḏū)
Глагол - Нифал - Несъвършен - мъжки род множествено число от трето лице
Еврейски 6504 на Strong's: Да пробиеш, разпространиш, разделиш
един народ
וּלְאֹם֙ (ū · lə · 'ōm)
Съединителна уау | Съществително име - мъжки род единствено число
Еврейски 3816 на Стронг: Общност
ще бъде по-силен
יֶֽאֱמָ֔ץ (ye · 'ĕ · māṣ)
Глагол - Qal - несъвършен - трети род мъжки род единствено число
Иврит 553 на Strong: За да бъде строг, силен, смел, бдителен
от другия,
מִלְאֹ֣ם (мили · 'ōm)
Предложение-м | Съществително име - мъжки род единствено число
Еврейски 3816 на Стронг: Общност
и по-старите
וְרַ֖ב (wə · raḇ)
Съединителна уау | Прилагателно - мъжки род единствено число
Еврейски 7227 на Strong: Много, много, страхотно
ще служи
יַעֲבֹ֥ד (ya · 'ă · ḇōḏ)
Глагол - Qal - несъвършен - трети род мъжки род единствено число
Еврейски 5647 на Стронг: Да работи, да служи, докато поробва
по-младите. "
׃יר׃ (·ā · 'îr)
Прилагателно - мъжки род единствено число
Еврейски 6810 на Стронг: Малка, незначителна, млада
«Два народа са в утробата ти;
И два народа от червата ви ще бъдат отделени;
И хората ще бъдат по-силни от хората;
И великият ще служи на малките. »
Вторият ред показва, че дори в най-ранното си детство синовете й биха били различни по характер и недружелюбни в разпореждането; след това следва тяхното развитие във враждебни нации и предсказанието, че синът, който е започнал с предимствата на първородното право, по-силната физическа природа и превъзходната сила при мъжете и оръжията (Битие 32: 6), ще остане най-накрая долна позиция. Не може да има съмнение, че второстепенната причина за развитието на вастера на Яков беше поставянето му от Йосиф в плодоносната Делта, където израилтяните непрекъснато се присъединяваха от поток семитски имигранти, чието движение към Египет е напълно автентичен факт на история на онези времена. (Вижте Битие 12:15.)
Азбучно: и бъдете тяло от нея в ГОСПОДНИ народи по-стари един друг народ народи са>
Сега ще сте двама
През януари 2000 г. бях един повече от единадесет пъти по-възрастен от моя син Уилям. През януари 2009 г. бях седем повече от три пъти по-възрастен от него. На колко години беше синът ми през януари 2000 г.?
Очевидно в „реалния живот“ щеше да се приближиш до моето дете и да го попиташ на колко години е, а той с гордост щеше да вдигне три мръсни пръста, но това няма да ти помогне в домашната работа. Ето как ще разберете възрастта му за клас:
Първо, назовете нещата и преведете английския на математика: Нека » E » стои за моята възраст през 2000 г. и нека » W » да стои за възрастта на Уилям. Тогава E = 11 W + 1 през 2000 г. (от «единадесет пъти повече, плюс още един»). През 2009 г. (девет години след 2000 г.) Уилям и аз ще бъдем девет години по-големи, така че нашите възрасти ще бъдат E + 9 и W + 9. Също така бях седем повече от три пъти по-възрастен от Уилям, така че E + 9 = 3 ( W + 9) + 7 = 3 W + 27 + 7 = 3 W + 34. Това ви дава две уравнения, всяко от които има две променливи:
Ако знаете как да решите системи от уравнения, можете да продължите с тези техники. В противен случай можете да използвате първото уравнение, за да опростите второто: тъй като E = 11 W + 1, включете »11 W + 1» във » E » във второто уравнение:
Не забравяйте, че проблемът не поиска стойността на променливата W ; тя поиска възрастта на човек. Така че отговорът е: Уилям беше на три години през януари 2000 г.
Важните стъпки по-горе бяха да настроите променливите, като ги маркирате всички ясно с техните дефиниции и след това да увеличите променливите с необходимото количество (в случая с 9), за да отразяват времето на времето. Не се опитвайте да използвате един и същ израз, за да обозначите две различни неща. Ако » E » означава моята възраст през 2000 г., тогава » E » може също да не е за моята възраст през 2009 г. Уверете се, че сте много категорични за това, когато създавате своите уравнения; запишете двата набора от информация (нашите възрасти в първия момент, а след това и възрастите във втория път) като две различни ситуации.
- След още три години дядото на Мигел ще бъде шест пъти по-стар, отколкото Мигел беше миналата година. Когато сегашната възраст на Мигел се прибави към днешната възраст на дядо му, общата стойност е 68. На колко години е всеки сега? Copyright © Elizabeth Stapel 2000-2011 Всички права запазени
Това упражнение се отнася не само за сегашната им възраст, но и за възрастта им миналата година и възрастта им за три години, така че етикетирането ще бъде много важно. Ще отбележа настоящата възраст на Мигел като " m ", а настоящата възраст на дядо му като " g ". Тогава m + g = 68. Възрастта на Мигел «миналата година» беше m - 1. Възрастта на дядо му «след още три години» ще бъде g + 3. „Възрастът на дядото три години от сега“ е шест пъти „възрастта на Мигел миналата година“ или, по математика:
Това ми дава две уравнения с две променливи:
Решавайки първото уравнение, получавам m = 68 - g . (Забележка: Добре е да решите и за » g = 68 - m «. Проблемът ще се получи малко по-различно в средата, но отговорът ще бъде същия в края.) Ще включа »68 - g »Във второто уравнение на мястото на» m «:
Тъй като » g » означава настоящата възраст на дядото, тогава дядото е на 57 години . Тъй като m + g = 68, тогава m = 11 и Мигел понастоящем е на единадесет години.
- Една половина от възрастта на Хедър две години от сега плюс една трета от нейната възраст преди три години е двадесет години. На колко години е сега?
Този проблем се отнася до възрастта на Хедър две години в бъдещето и три години в миналото. Така че ще избера променлива и ще маркирам всичко ясно:
възраст сега: H
възраст две години от сега: H + 2
възраст преди три години: H - 3
Сега имам нужда от определени части от тези възрасти:
половин възраст от две години от сега: ( 1/2 ) ( H + 2) = H / 2 + 1
една трета от възрастта преди три години: (1/3) ( H - 3) = H / 3 - 1
Сумата от тези две числа е двадесет, така че ще ги добавя и ще поставя това равно на 20:
Просто бъдеще
Простото бъдеще има две различни форми на английски: «will» и «will be to.» Въпреки че понякога двете форми могат да се използват взаимозаменяемо, те често изразяват две много различни значения. Тези различни значения може да изглеждат твърде абстрактни в началото, но с времето и практиката разликите ще станат ясни. И "воля", и "ще отида" се отнасят за конкретно време в бъдеще.
- По-късно ще му помогнете .
- Ще му помогнеш ли по-късно?
- Няма да му помогнеш по-късно.
ФОРМУЛА Бъдете на
[am / is / are + ще отидете на + VERB]
- Тази вечер ще се срещнете с Джейн.
- Ще се срещнеш ли Джейн тази вечер?
- Няма да се срещнете с Джейн тази вечер.
ИЗПОЛЗВАЙТЕ 1 «Ще» да изразявате доброволно действие
«Will» често предполага, че ораторът ще направи нещо доброволно. Доброволното действие е онова, което ораторът предлага да направи за някой друг. Често използваме «воля», за да отговорим на оплакване на някой друг или молба за помощ. Ние също така използваме «will», когато искаме някой да ни помогне или доброволно да направи нещо за нас. По същия начин ние използваме «няма» или «не», когато откажем доброволно да направим нещо.
- Ще ви изпратя информацията, когато я получа.
- Ще преведа имейла, за да може господин Смит да го прочете.
- Ще ми помогнете ли да преместя тази тежка маса?
- Ще направите ли вечеря?
- Няма да ви свърша домашната работа.
- Аз самият няма да свърша всички домакински работи!
- О: Много съм гладен.
Б: Ще направя сандвичи. - О: Аз съм толкова уморен. Предстои ми да заспя.
Б: Ще ти пия кафе. - О: Телефонът звъни.
Б: Ще го разбера .
ИЗПОЛЗВАЙТЕ 2 «Ще» да изразя обещание
«Will» обикновено се използва в обещания.
- Ще ви се обадя, когато пристигна.
- Ако бъда избран за президент на Съединените щати, ще се погрижа всички да имат достъп до евтина здравна застраховка.
- Обещавам, че няма да му разказвам за партито на изненадата.
- Не се притеснявайте, ще внимавам.
- Няма да кажа на никого вашата тайна.
ИЗПОЛЗВАЙТЕ 3 «Ще отида», за да изразя план
«Да отидеш» изразява, че нещо е план. Тя изразява идеята, че човек възнамерява да направи нещо в бъдеще. Няма значение дали планът е реалистичен или не.
- Той ще прекара почивката си в Хавай.
- Тя няма да прекара почивката си на Хаваите.
- О: Кога ще се срещнем тази вечер?
Б: Ще се срещнем в 18:00. - Ще стана актьор, когато порасна.
- Мишел ще започне медицинско училище догодина.
- Те ще карат чак до Аляска.
- Кого ще поканите на партито?
- О: Кой ще направи тортата за рожден ден на Джон?
Б: Сю ще направи тортата за рожден ден на Джон.
ИЗПОЛЗВАЙТЕ 4 «Ще» или «Ще отидете» да изразите прогноза
И "воля", и "ще отида" могат да изразят идеята за общо прогнозиране за бъдещето. Прогнозите са предположения какво може да се случи в бъдеще. В изреченията с „предсказване”, обектът обикновено има малък контрол върху бъдещето и следователно ИЗПОЛЗВАНЕ 1-3 не се прилагат. В следващите примери няма разлика в значението.
- 2222 година ще бъде много интересна година.
- 2222 година ще бъде много интересна година.
- Джон Смит ще бъде следващият президент.
- Джон Смит ще бъде следващият президент.
- Филмът «Зенит» ще спечели няколко награди на Оскар.
- Филмът «Зенит» ще спечели няколко награди на Оскар.
В простото бъдеще не винаги е ясно коя ИЗПОЛЗВАНЕ говорителят има предвид. Често има повече от един начин да се интерпретира значението на изречението.
Няма бъдеще във времеви клаузи
Както всички бъдещи форми, простото бъдеще не може да се използва в клаузи, започващи с изрази във времето, като например: когато, докато, преди, след, по времето, веднага щом, ако, освен ако и т.н. Вместо просто бъдеще, простото настояще е използва.
- Когато пристигнете тази вечер, ще излезем на вечеря. Неправилно
- Когато пристигнете тази вечер, ще излезем на вечеря. правилен
СРЕДНО ПОМОЩ
Примерите по-долу показват разположението за граматически наречия като: винаги, само, никога, никога, все още, просто и т.н.
- Никога няма да му помогнете.
- Ще му помогнеш ли някога ?
- Никога няма да се запознаете с Джейн.
- Ще се запознаете ли някога с Джейн?
АКТИВЕН ПАСИВЕН
- Джон ще завърши работата до 17:00 часа. Активен
- Работата ще приключи до 17:00 часа. Пасивен
- Сали ще направи красива вечеря тази вечер. Активен
- Красива вечер ще бъде направена от Сали тази вечер. Пасивен