Մեսսենջերներ և ստացողներ Ruby-ով

Ռուբիում բազմաթիվ կոնվենցիաներ կան: Դա հեշտ լեզու է, բայց նաև բարդ է: 2010-ից մինչև 2012 թվականներին ոտքիս մատը Java-ի և PHP-ի մեջ մտցնելուց և eBay-ի շահույթի կանխատեսման փոքր հաշվիչը ստեղծելուց հետո՝ որպես իմ առաջին վեբ հավելված, ես հայտնաբերեցի Ruby-ին, երբ մասնակցեցի Ռուբիի իմ առաջին հանդիպմանը Ցինցինատիում: Այդ ժամանակվանից ես հետ չեմ նայել, բայց ես խելագարորեն հետաքրքրված եմ ավելի նոր լեզուներով և պարադիգմներով: Փաստորեն, ես հիմա ուսումնասիրում եմ Էլիքսիրը, որին լրջորեն եմ վերաբերվում, քանի որ ժամանակը թույլ է տալիս, բայց եկեք ոսպնյակը պահենք Ռուբիի վրա մեկ րոպե:

Նախապատմություն

Ես ծրագրային ապահովման ինժեներ եմ ընդամենը 4-5 տարի: Ես քոլեջում համակարգչային գիտություն չեմ սովորել: Սկզբում ես սկսեցի ինքնուրույն սովորել և կարիերան փոխեցի հայտնի իրավաբանական հետազոտական ​​կազմակերպությունում որպես խորհրդատու և ծրագրի ղեկավար աշխատելուց: Ես վերականգնել եմ իմ թաղված հետաքրքրությունը ծրագրային ապահովման ճարտարագիտության նկատմամբ՝ կարդալով պատմություններ հանրաճանաչ վեբ և բջջային հավելվածների ստեղծման մասին:

Իմ առաջին փորձը ծրագրային կերպով հաղորդագրություններ փոխանցելու մեքենային եղավ 1980-ականների սկզբին այն բանից հետո, երբ հայրս տուն բերեց կոմոդոր: Ես ընդամենը 5 կամ 6 տարեկան էի, երբ առաջին անգամ բացեցի ներառված կապիչը և հասկացա, որ ես կարող եմ ինչ-որ բան ստեղծել ոչնչից, բացի իմ երևակայությունից, ծածկագրից և կոպիտ կամքից մեր VIC-20-ի վրա, ուստի ժամեր էի ծախսում դրա վրա:

Հետաքրքրասիրությունն ինձ դեռ մղում է 35 տարի անց: Բացի այդ, ես պարզապես ուզում եմ ավելի հմուտ լինել այն, ինչ սիրում եմ: Գիտելիքի և տեղեկատվության փափագը և փոխանակումը կենսական նշանակություն ունեն ծաղկող էկոհամակարգի համար: Ողբերգություն է, որ մեր ոլորտում ոմանք հակված են չհամաձայնել, բայց դա այլ թեմա է:

Օբյեկտ ուղղված մտադրությունը որպես հաղորդագրություն

Ես ինքս ինձ դժվարանում էի Ռուբիով մեսենջերների և ընդունիչների հակիրճ ձևակերպման համար: Թեև ես գրել եմ «Ռուբին» մասնագիտորեն՝ շարունակաբար զարգացող ըմբռնումով նրա բազմաթիվ կողմերի մասին, OOP մոդելն իմ մտքում պահանջում էր հետագա կատարելագործում: Բացի այդ, դա օգնում է իմանալ, թե ինչպես բացատրել բաները:

Պարզվում է, որ հաղորդագրությունների փոխանակումը հաշվարկման դերասան մոդելից փոխառված կոնցեպտուալացում է: Ալան Քեյը վերագրվում է Օբյեկտային կողմնորոշված արտահայտությունը հորինելու համար, սակայն նա ափսոսում է դա անել, քանի որ դա ենթադրում է, որ առարկաները ուշադրության կենտրոնում են, երբ նա հաղորդագրություններն է համարում առավել կարևոր գաղափար:

Հաղորդագրությունը միշտ ներառում է «ուղարկող» և «ստացող»: Ruby-ում հաղորդագրության «ուղարկողը» մեթոդը կանչող օբյեկտն է, իսկ «ստացողը» այն օբյեկտն է, որի մեթոդը կանչվում է: Եթե ​​մեթոդը կանչելիս օբյեկտը բացահայտորեն թիրախավորված չէ, մեթոդի անվանումը և դրա արգումենտները որպես հաղորդագրություն ուղարկվում են self-ի լռելյայն ստացողին: Օբյեկտային կողմնորոշման գաղափարն այն է, որ հաղորդագրությունների «կանչում» և «ուղարկում» համարժեք հասկացություններ են: Նմանապես, «կանչվելը», սեփական մեթոդի «կանչում» լինելը կամ հաղորդագրություն «ստանալը» նույնպես համարժեք են:

Ինչպիսի՞ն է նման պարզ օրինակը Ruby-ում:

Եթե ​​լարին ասում եք, որ ինքը հետ շրջվի, դուք ուղարկողն եք, իսկ առարկան՝ ստացողը:

=> “computer science is fascinating”.reverse

որը համարժեք է.

=> “computer science is fascinating”.send(:reverse)

Տողային օբյեկտին reverse հաղորդագրություն ուղարկելը նշանակում է տողը որպես ստացող, ուստի ելքը կլինի.

=> “gnitanicsaf si ecneics retupmoc”

Կարող եք նաև ստուգել՝ արդյոք օբյեկտը կարող է կառավարել այն հաղորդագրությունը, որը ցանկանում եք ուղարկել respond_to?-ով:

“bacon grilled cheese and tomato soup”.respond_to?(:reverse)
=> true
Hash.new.respond_to?(:reverse)
=> false

Ավելի բարդ ծրագրի հետ աշխատելիս, որը փոխգործակցում է այլ API-ների հետ, դուք պետք է ստեղծեք հաճախորդի օբյեկտ, որին կարող եք հաղորդագրություն ուղարկել: Օգտագործման դեպք կարող է լինել Twitter-ին հրահանգել վերցնել օգտատիրոջ պրոֆիլը կամ ստանալ վերջին 10 թվիթները «@arstechnica-ից» կամ Slack-ին հրահանգել իր API-ի միջոցով առբերել իմ բոլոր աստղանշված տարրերը տեղական պահեստավորման համար նախքան փակումը: հաշիվ.

Դա մի խոսքով օբյեկտի կողմնորոշումն է Ruby-ի հետ:

Ես կեզրափակեմ Սանդի Մեցից այս խոսքերով.

Օբյեկտ-կողմնորոշված ​​հավելվածները կազմված են օբյեկտներից և նրանց միջև անցնող հաղորդագրություններից: Հաղորդագրությունները երկուսից ավելի կարևորը կդառնան: