Much O.F. LAGER Predislovie avtora Estestvenno, pervyj vopros k nazvaniyu etoj knigi: zachem nuzhen speci- al'nyj yazyk programmirovaniya dlya zhenshchin? Do etoj knigi vse yazyki progra- mmirovaniya pisalis' muzhchinami i dlya muzhchin. A sut' v tom, chto lyuboj yazyk programmirovaniya - prezhde vsego yazyk logiki, a zhenskaya logika sushchestven- no otlichaetsya ot muzhskoj. Redaktor (kstati, moj drug po svetlomu pivu) pravil'no zametil, chto osnovnoe preimushchestvo programm na Male C v tom, chto oni pishutsya ne dlya resheniya zadach, otvet kotoryh izvesten; programmy na etom yazyke pishutsya dlya nahozhdeniya netrivial'nyh reshenij. Pochemu togda "Male C", a ne "Female C"? Delo v tom, chto etot yazyk nu- zhen skoree dlya muzhchin, chtoby ponyat' logiku zhenshchin, a ne naoborot - zhen- shchiny prekrasno ponimayut muzhchin (no eto ne znachit, chto oni razdelyayut ih vzglyady). Poyasnim na primerah. (v dal'nejshem sluzhebnye slova yazyka budem pisat' celikom v verhnem registre). 1. CHto oznachaet? GOTO begin; Muzhchina skazhet, chto on sobiralsya perejti na zadannuyu metku i poetomu postavil etot BEZUSLOVNYJ perehod. Odnako sprosite zhenshchinu i ona vam ot- vetit, chto esli ona kuda-to sobralas', to eto ne znachit, chto imenno tuda ona i pojdet. Esli ona sobiralas' v prachechnuyu, zatem v produktovyj maga- zin, to ne isklyucheno, chto snachala ona zajdet v modnyj magazin, kupit tam chto-nibud', a zatem zajdet k priyatel'nice obsudit' pokupku. I eto budet ee konechnaya ostanovka. 2. CHto oznachaet? WHILE (hour == 23.00) WORK(); Muzhchina skazhet, chto on - dobytchik i eto zastavlyaet ego rabotat' do- pozdna. ZHenshchina zhe sdelaet vyvod, chto muzhchina lyubit rabotu bol'she, chem ee. 3. CHto oznachaet? IF (I'd like to eat) I eat; ELSE I don't eat; S tochki zreniya muzhchiny vse logichno: esli on hochet est', on est, esli net, to - net. Odnako dlya zhenshchiny vse eto slishkom pryamolinejno. CHto ona zhivotnoe, chto li? U zhenshchiny mozhet byt' sto prichin dlya togo, chtoby po- est': hochetsya perekusit', plohoe nastroenie, skryt' smushchenie, dosadit' priyatelyu, s®ev ego delikates, da malo li chto! A uzh naskol'ko irracio- nal'no (s tochki zreniya muzhchiny) zhenshchiny ob®yasnyayut, pochemu oni edyat |TO i ne edyat TO. Sovetuem muzhchinam prochitat' s desyatok raznyh diet i najti logiku v to, k primeru, pochemu v odnoj diete sovetuyut est' myaso, v dru- goj kategoricheski eto zapreshcheno - ved' cel' vse oni presleduyut odnu i tu zhe - pohudanie. 4. CHto oznachaet It is TRUE; Everything; I DO; I DO; it; FOR (you) ... Muzhchina najdet zdes' massu sintaksicheskih oshibok (s tochki zreniya yazy- ka C). I tol'ko zhenshchina mozhet ponyat', chto eto prosto lyubovnaya pesenka Billi Dzhoela... Koe-kto mozhet skazat', chto zhenskaya logika - ne logika voobshche. Odnako kriterij teorii - praktika, i kazhdyj mozhet ubedit'sya, chto takie nelogich- nye sushchestva, kak zhenshchiny, vpolne uspeshno sushchestvuyut v etom mire. Tak chto nachnem. S. Cool 1. Konstanty V Male C net takogo ponyatiya, kak konstanta. Nichto v mire ne vechno, dazhe lyubov'. Odnako est' neskol'ko ponyatij, o kotoryh tochno izvestno, chto oni sushchestvuyut i kotorye v Male C, takim obrazom, postoyanny. Odnako povtoryaem, chto tochnoe znachenie ih neizvestno. Takih konstant neskol'ko: LOVE /* naibolee vazhnaya konstanta, chashche vsego cel' programmy. Imeet dva znacheniya: YES NO */ |ta edinstvennaya konstanta, ponyat' kotoruyu mozhno tol'ko iz konteksta, poskol'ku neobhodimo eshche znat', kakaya LOVE imeetsya vvidu. Primechanie: Nekotorye schitayut, chto sushchestvuet mnozhestvo promezhutochnyh znachenij etoj konstanty. Kommentarij: osetrina byvaet svezhej ili... SEX /* menee vazhnaya konstanta, chashche vsego put' k pervoj konstante */ Primechanie: Koe-kto dumaet naoborot. Bez kommentariev. HEALTH /* samaya nepostoyannaya konstanta. Obychno prinimaet tri znacheniya: BAD - inogda GOOD - inogda SO-SO - chashche vsego. */ MONEY /* kriticheskij parametr, vsegda ne hvataet */ Primechanie: Nekotorye polagayut, chto s pomoshch'yu etoj konstanty mozhno poluchit' vse ostal'nye. Bez kommentariev. WORK /* sredstvo dlya napolneniya predydushchej konstanty */ Primechaniya: Nekotorye polagayut, chto WORK sushchestvuet TOLXKO dlya samovyrazheniya. Kommentarij: v dome bez tualeta zhit' mozhno. No neudobno. Primechanie: v Male C+ WORK pridaetsya status operatora, a ne konstanty. |to novye veyaniya - rabota uzhe ne schitaetsya neobhodimoj dlya uspeha. STATE /* voobshche-to, eto konstanta iz yazyka Male C+, odnako v posled- nee vremya ona vvedena v bol'shinstvo translyatorov yazyka S. Hotya my schita- em, chto Male C+ bolee muzhsko-shovinistkij dialekt, no... */ Prinimaet dva sostoyaniya: RULEZ - Vse OK, vse otlichno, velikolepno i pr. SUX - Vse naoborot. Primechanie: V Male C vvoditsya eshche neskol'ko konstant, k sozhaleniyu, muzhsko-shovinistskih. Ne vdavayas' v podrobnosti, my opishem neskol'ko dlya polnoty kartiny: BEER /* obychno prinimaet drobnye znacheniya, 0.3, 0.5, rezhe 1, 2 */ CAR /* obychno ravno 1; zachastuyu zamenyaet vse ostal'nye konstanty */ SPORT /* esli ne WORK, ne SEX i ne BEER, no SPORT, odnako chashche vsego v passivnoj forme nablyudeniya */ Zabegaya nemnogo vpered, predlagaem dlya samostoyatel'nogo razbora pros- ten'kuyu programmu s ispol'zovaniem vysheopisannyh konstant (zamet'te, chto smysl programmy nado iskat' ishodya ne tol'ko iz odnih operatorov). RULEZ; IF (LOVE == SEX) BAD; ELSE IF (LOVE == WORK) SO-SO; ELSE (LOVE == YES) GOOD; LOVE == NO; VERY BAD; END; Koroche, esli vy chuvstvuete lyubov', no ne mozhete dat' ej opredelenie, eto horosho. 2. Peremennye 2.1. Odinochnye peremennye Peremennye v yazyke Male C imeyut primerno to zhe samoe znachenie, chto i v drugih yazykah. Odnako, kak v staryh yazykah, v Male C net neobhodimosti yavno opredelyat' tip peremennyh, kogda ih smysl yasen iz konteksta. K primeru, esli parikmaher ploho ulozhil vam volosy, eto bezuslovno, Shit. A esli on k tomu zhe eshche i szheg ih, to eto DOUBLE Shit. Dlya zhenshchiny Whisky redko byvaet DOUBLE, a muzhchina vpolne mozhet osilit' takuyu porciyu. Wood, konechno, imeet tip FLOAT. A Axe - navryad li. A dlya Submarine etot vopros nahoditsya v stadii obsuzhdeniya. GLASS obychno INT, no esli primenit' k nemu operator BREAK, to navryad li ono (on) ostanetsya celoj(lym). Skirt luchshe vsego SHORT (vprochem, vecherom mozhno i LONG). A vot stro- kovaya konstanta (razgovor dvuh zhenshchin) pochti vsegda LONG a ne SHORT. Esli zhenshchina zamuzhem, no na kurorte ona odna, to Husband dlya nee po- nyatie VIRTUAL, odnako doma, on, konechno, REAL. Mnogie zhenshchiny hoteli by imet' CHAR (prihodyashchuyu uborshchicu), no chashche vsego eto ostaetsya UNSIGNED mechtoj i pahat' na kuhne i na uborke priho- ditsya samoj. Charge mozhet byt' STATIC, a vot CURRENT (elektricheskij) - po oprede- leniyu net. Osobyj tip peremennoj - LOGICAL. Hotya ona prinimaet vsego dva znache- niya TRUE i FALSE, eto ne znachit, chto na osnovanii ee znacheniya mozhno pri- nimat' kakie-libo dejstviya. Esli MONEY is EMPTY, eto eshche ne znachit, chto kupit' novuyu shlyapku nevozmozhno (osobenno ne sovetuem vyskazyvat'sya ob umstvennyh sposobnostyah svoej zheny, kotoraya vse zhe sdelala eto). Primechanie: v Male C+ i nekotoryh dialektah C dlya resheniya etoj prob- lemy vvodyatsya dopolnitel'nye znacheniya etoj peremennoj, tipa ALMOST.TRUE ili BETWEEN.TRUE.FALSE. My schitaem, chto v etom net neobhodimosti, t.k. ne reshaetsya glavnaya problema: vybor. Esli vash muzh vozvrashchaetsya ochen' pozdno, v podpitii, stranno pahnet duhami i pri etom govorit, chto zader- zhalsya na rabote, eto mozhet hot' ALMOST.TRUE, hot' ALMOST.FALSE, vse rav- no nichego, krome skalki, ne pomozhet. CHerez tri mesyaca posle vashej zhe- nit'by zhena mozhet prinesti vam chernokozhego mladenca. Esli pri etom ona ubezhdaet vas, chto ni s kem, krome vas, poslednij god v blizkih otnosheni- yah ne byla, vasha LOVE k nej mozhet zastavit' schitat' eto i za BETWEEN. TRUE.FALSE i dazhe za TRUE. Odnako vy, veroyatnej vsego, budete edistven- nym v etom ubezhdenii. 2.2. Nabory peremennyh Nabory peremennyh - gruppa peremennyh, svyazanyh obshchimi svojstvami. K primeru, massiv Furniture [] soderzhit nabor mebeli, a sostavnaya peremen- naya Age_of_Women - vozrast zhenshchiny. INT LOVE [ SEX, Flirt, LOVE] ochevid- no oboznachaet nabor sostoyanij lyubvi. 3. Operacii prisvaivaniya. Operacii prisvaivaniya voobshche odni iz samyh populyarnyh u nas operacij. |tim zanimayutsya vse, nachinaya s vashih detej i konchaya gosudarstvom. Operacii prisvaivaniya dlya peremennyh v obshchem takie zhe, kak i v obychnom C, krome nekotoryh nevazhnyh sluchaev dlya uproshcheniya ponimaniya programm. Primery: MONEY = $100 to zhe samoe, chto MONEY is $100 IF ( FOUND ) to zhe samoe, chto FOUND STATE is RULEZ to zhe samoe, chto RULEZ 4. Cikl DO. Po zamyslu sozdatelej yazyka, dolzhen byt' samym upotrebitel'nym opera- torom. Dejstvitel'no, razve vseh nas ne uchili v detstve, chto edinstven- nyj put' k izvestnosti i dostatku - trud? Odnako mnogie iz nas vyrosli i nashli raznye puti k dostatku i bez utomitel'nyh ciklov DO. K primeru, molodaya devushka pishet v gazety besplatnyh ob®yavlenij: "18 let, obaya- tel'naya-privlekatel'naya 90-60-90, bez special'nyh navykov, rasmotryu pre- dlozheniya ot $500". Kstati, razberem eto ob®yavlenie na Male C i poprobuem sdelat' vyvody. MONEY is EMPTY; SEEK ( WORK ); IF ( MONEY < $500) BREAK; /* Oblom */ DO { SEX; WHILE (HEALTH is SO-SO); } Is STATE GOOD ? Molodaya-privlekatel'naya bez osobyh navykov, no s zaprosami ot $500 mozhet poluchit' tol'ko opredelennuyu rabotu, prichem ves'ma intensivno. Pri etom, pravda, otvet na poslednij operator programmy ostaetsya otkrytym. Koe-komu nravit'sya byt' "sekretutkoj". 5. Osobye operatory. Smysl osobyh operatorov mozhno ponyat' iz ih perevoda. Net smysla pere- chislyat' ih vse, t.k. spisok sushchestvenno zavisit ot realizacii yazyka. Od- nako my raz®yasnim smysl nekotoryh, ispol'zuemyh v etom rukovodstve. SEEK () - poisk. V skobkah ukazyvaetsya peremennaya, po kotoroj vedetsya poisk. SEEK ( Husband ) i SEEK ( Lover ) daleko ne odno i to zhe, hotya, konechno, kazhdaya zhenshchina nadeetsya, chto ee muzh vsegda budet horoshim lyubov- nikom, a ee lyubovnik nakonec razvedetsya s zhenoj i zhenit'sya na nej. FOUND () - najdeno! CHto najdeno, smotrite v skobkah. Sleduyushchij primer illyustriruet horosho izvestnyj fakt, chto iskat' chernuyu koshku v temnoj ko- mnate - beznadezhnoe zanyatie. DOUBLE Room = Cat = Black; SEEK ( Cat ); FOUND ( EMPTY ); 6. Operator RETURN. Vse vozvrashchaetsya na krugi svoya. Takim obrazom, RETURN neposredstven- no svyazan s operatorami ciklov. Primer: INT Age; IF ( Age > 50 ) IF ( WORK is GOOD \!\! Alcohol is EMPTY ) HEALTH is GOOD; ELSE HEALTH is BAD; Age != RETURN; DIE; END; Konechno, posle 50 zdorov'e uzhe ne to, osobenno esli vy zloupotreblya- li. S drugoj storony, "Kto ne kurit i ne p'et, tot zdoroven'kij pomret" - gody ne vozvratish'. 7. Operator CONTINUE Bol'shej chast'yu opyat' zhe ispol'zuetsya v ciklah. Rassmotrim primer: INT Age; INT Man; INT Tired is NO; IF ( Age_of_Women > 30 ) DO { SEX; IF ( Man is Tired ) { SUX; LOVE is NO; BREAK; } CONTINUE; } Esli zhenshchine za tridcat' i ee muzhu gde stol'ko zhe ili bol'she, to dlya nego nachinayutsya trudnye vremena. Esli on budet postoyanno ssylat'sya na ustalost', to zhenshchinu zhdet oblom, neudovletvorennost' v lyubvi i voobshche SUX. A esli ne budet, no vy polagaete, chto budet RULEZ? A vot i net. Est' tol'ko prodolzhenie, prodolzhenie i prodolzhenie. 8. Operator SWITCH Pereklyuchat'sya v zhizni neobhodimo postoyanno. I vynuzhdeno, i prosto po- tomu, otdyh neobhodim. Sleduyushchij primer illyustriruet tot prostoj fakt, chto otdyh - smena deyatel'nosti. DOUBLE Relax; DO {WORK; WHILE ( HEALTH is SO-SO )} SWITCH ( MONEY ) { CASE ($1000): KANARY; CASE ($500): Relax_House; CASE ($10): BEER; } HEALTH is GOOD; Vopros, kak podejstvuyut Kanary, Dom Otdyha ili pivo na zdorov'e konk- retnogo individa, ostaetsya otkrytym. My nadeemyasya, chto ono uluchshit'sya (dazhe ot piva). 9. Operator BREAK BREAK - operator avarijnogo vyhoda, chashche vsego v negativnom smysle (oblom). Razberem primer: CHAR WORK is Empty; SEEK ( WORK ); FOUND; SWITCH ( MONEY ) { CASE ($10/Month): BREAK; CASE ($100/Month): BREAK; CASE ($1000/Month): RULEZ; } Rezul'tat poiskov raboty mozhet byt' raznym. Esli zarplata men'she $1000 v mesyac - SUX i BREAK (t. e. oblom). Eshche primer: INT Glass; IF ( SUX ) { DO Glass BREAK; } RULEZ; Recept uluchsheniya nastroeniya - bit'e posudy sovershenno neponyaten muzh- chinam. Odnako, predstav'te, chto na meste Glass (bokala) mogli by oka- zat'sya vy... 10. Operator GOTO GOTO - operator yazyka, kotorym pol'zovateli Male C obmenivayutsya s drug drugom. Ochen' udobno: vash shef prosit vas prinesti kvartal'nyj ot- chet, a vy posylaete ego v $%# do perepolneniya ego steka terpeniya. Drugoj sluchaj: dazhe esli vy ochen' toropites', sovetuem vse zhe vospol'zovat'sya perehodom, a ne bezheat' slomya golovu pryamo cherez dorogu. V novyh veyaniyah (Male C++) schitaetsya, chto etot operator lishnij. Odna- ko razberem primer: #DEFINE HOUSE KEEPING #INCLUDE WASHING MACHINE MAIN () { FLOAT Thing is Dirty; WHILE (Thing) { Wash; BAD; GOTO HELL; } HELL: Shop \!\! Barbeshop \!\! Love-story_reading; } Ponyatno, chto domashnyaya rabota (v chastnosti, stirka) beskonechna, i chis- lo gryaznyh veshchej (Thing) nikogda ne konchitsya. Poetomu neobhodimo is- pol'zovat' operator bezuslovnogo perehoda, kotoroe v dannom sluchae posy- laet etu rabotu v HELL. Kogda ego ispol'zovat', zavisit ot vashego nast- roeniya, odnako esli vy ne hotite BAD s vashim muzhchinoj, starajtes' im ne zloupotreblyat'. Primechanie: nekotorye skazhut, chto v napisannom primere mozhno bylo vo- spol'zovat'sya operatorom BREAK. I chto? Vy ostanovili rabotu, a ne posla- li ee k chertu i vam pridetsya rano ili pozdno ee prodolzhit', prichem nave- rnyaka peremennaya THING sushchestvenno uvelichitsya. Nekotorye mogut zametit' strannoe opredelenie metki "cherta". Tak ved' k chertu posylaetsya stirka, a vmesto nee predlagaetsya ili pohod po maga- zinam, ili parikmaherskaya, ili prosto chtenie lyubovnyh romanov. Eshche odin primer illyustriruet tot fakt, chto zhenshchina lyubit ushami: CHAR Ask "Do you love me?"; Neverending: IF ( Ask is 'Yes') GOTO Neverending; 11. Uslovnye operatory Ne sluchajno etot razdel my otnesli blizhe k koncu. Smysl etogo opera- tora slishkom ocheviden: zhizn' polna kompromissov i vypolnenie vashih zhela- nij postoyanno natalkivaetsya na massu uslovij. Nadeemsya, chto nash yazyk po- mozhet vam v reshenii vashih problem. V sleduyushchem punkte my predostavim vam neskol'ko programm dlya samostoyatel'nogo izucheniya. 12. Primery 1. Kandidat na brak. #UNDEFINE MAN #INCLUDE ALL MAIN (Target is LOVE); LONG CHAR Why = "Zachem vy devushki, NICE LOVE, neCONST u nih LOVE"; INT MAN [ Boss, Friend, Nice ...]; INT LOVE [ SEX, Flirt, LOVE]; SEEK ( LOVE ); FOUND MAN; IF ( Man[Boss] ) FOUND SEX; IF ( Man[Friend] ) FOUND Flirt; IF ( Man[Nice] ) DO Why; ELSE New SEEK; Primechanie: mogut skazat', a kak zhe vse zhe najti svoyu lyubov'. Nu, do- rogie damy, esli vy schitaete, chto eto zadachu za vas smogut reshit' mashi- ny... 2. Muzh vernulsya iz komandirovki... INT Lover is IN_FRIDGE; INT Husband is FOOL; LONG CHAR Kill ( Lover must die! ); INT Furniture[Dresser, Bed, ...]; RETURN ( Husband ); Husband; SEEK ( Lover ); IF ( Furniture[Any] ) FOUND { SAY Kill; SUX; } ELSE RULEZ; Muzh, konechno, uspokoitsya, ne najdya lyubovnika. No chto budet s lyubovni- kom, kotoryj spryatalsya v holodil'nike? I vpravdu udovol'stviya poznayutsya cherez stradaniya. 13. Zadachi. Kak vy uzhe ponyali, Male C - universal'nyj yazyk programmirovaniya, pos- redstvom kotorogo mozhno reshat' obshirnyj krug povsednevnyh zadach. Edins- tvennyj put' izucheniya yazyka - govorit' na nem. Predlagaem neskol'ko za- dach dlya samostoyatel'nogo resheniya: 1. Klassicheskij treugol'nik: vy lyubite ego, on lyubit druguyu, a ona lyubit vas. Varianty reshenij: - vy dobivaetes' ego vzaimnosti; - vy dobivaetes' ee vzaimnosti; - vy stanovites' ih vzaimnosti; - vy otvechaete vzaimnost'yu svoej sobake. Primechanie: mogut vozrazit', chto klassicheskij treugol'nik vyglyadit po-drugomu. Odnako my polagaem, chto esli dvoe vlyubleny v odnogo, to eto ne treugol'nik, a ugol: ------>  /|\ | | 2. Variant bez sopernicy: Vy lyubite ego, a on lyubit sebya. Poprobujte sami najti vse resheniya. 3. Vas shef aktivno dobivaetsya vas. Varianty resheniya: - vy otvergaete ego domoganiya i teryaete rabotu; - vy ustupaete emu i teryaete svoe dostoinstvo; - vy znakomite ego so svoim drugom-banditom i on teryaet svoe dosto- instvo. 4. Vash muzh postoyanno hodit nalevo. Varianty resheniya: - uehat' k mame; - skalkoj svorotit' emu skulu tak, chtoby on mog smotret' tol'ko napra- vo; - samoj shodit' nalevo. Mnozhestvo drugih problem vy smozhete najti v izvestnoj knige, klassike nashego dela "1001 problema pro eto" a takzhe v zhurnale "Vse problemy, ko- torye vy hoteli reshit', no ne imeli dlya etogo podhodyashchego instrumenta". Primechanie: Problemy Male C- mozhno najti i v populyarnoj gazete "C-pid Info". i v peredache "YA C-ama. V peredache "LOVE C 1 vzglyada" obsuzhdayutsya problemy yazyka LOVE C versii 1. V zhurnale "5 How C" vy najdete bolee slozhnye zadachi iz yazyka versii 5. 14. Posleslovie V sleduyushchej knige my razberem osobennosti realizacii Male C+, Male C++, i voobshche Male Cn+. K sozhaleniyu, my ne budem obsuzhdat' problemy lyu- boj realizacii yazyka C- po ponyatnym moral'no-eticheskim prichinam. sentyabr' 1997 PALEK