{"id":229196,"date":"2022-11-09T14:19:00","date_gmt":"2022-11-09T11:19:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229196"},"modified":"2022-11-09T14:32:04","modified_gmt":"2022-11-09T11:32:04","slug":"mis-on-ikkagi-programmeerimise-korvalmojud","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/mis-on-ikkagi-programmeerimise-korvalmojud\/","title":{"rendered":"Mis on ikkagi programmeerimise k\u00f5rvalm\u00f5jud?"},"content":{"rendered":"\n<p>Alati, kui me r\u00e4\u00e4gime teatud programmeerimiskontseptsioonidest, on minu arvates oluline astuda samm tagasi mis tahes spetsiifikast, mida me arutame, ja vaadata asju laiema pildi kontekstis.<\/p>\n<p>M\u00f5ned moodulid tutvustavad k\u00f5rvaltoimeid; m\u00f5ned mitte. See on korras.<\/p>\n<p>N\u00e4iteks <a href=\"https:\/\/wordpress.mediadoma.com\/et\/pohilised-kodeerimisstandardid-psr-1-kaudu\/\" title=\"eile\">eile<\/a> puudutasin p\u00f5gusalt k\u00f5rvalm\u00f5jude programmeerimise ideed, kuid tegin seda PSR-ide kasutamisest r\u00e4\u00e4kides. Ja neile, kes on lihtsalt huvitatud programmeerimise aspektidest \u00fcldisemas m\u00f5ttes, on oluline ka neid m\u00f5ista.<\/p>\n<p><a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Pidage meeles, et PSR-1-s kirjeldatud<\/a> k\u00f5rvaltoimete idee on j\u00e4rgmine:<\/p>\n<blockquote>\n<p>Fail PEAKS deklareerima uusi s\u00fcmboleid (klassid, funktsioonid, konstandid jne) ega p\u00f5hjusta muid k\u00f5rvalm\u00f5jusid v\u00f5i PEAKS t\u00e4itma k\u00f5rvalm\u00f5judega loogikat, kuid EI TOHI teha m\u00f5lemat.<\/p>\n<\/blockquote>\n<p>Selles postituses ei ole ma nii huvitatud k\u00f5rvalm\u00f5judega loogika \u00fcle arutlemisest (sest on aegu, kus k\u00f5rvalm\u00f5jud tekivad). Selle asemel tegelen rohkem programmeerimise k\u00f5rvalm\u00f5jude m\u00f5istmisega (mis need on, mida v\u00e4ltida jne).<\/p>\n<p>L\u00f5ppude l\u00f5puks v\u00f5ib k\u00f5rvalm\u00f5judest r\u00e4\u00e4kimine \u00fches kontekstis t\u00e4hendada \u00fcht, programmeerimisel aga teist.<\/p>\n<h2>Programmeerimise k\u00f5rvalm\u00f5jud<\/h2>\n<p>Olgu, nii et kogu \u00fcldise k\u00f5rvalm\u00f5ju idee v\u00f5i m\u00e4\u00e4ratlus on lihtne, <a href=\"https:\/\/d.pr\/Jyf2Np\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\">eks<\/a>? <\/p>\n<blockquote>\n<p>ravimi v\u00f5i ravi teisene, tavaliselt ebasoovitav toime.<\/p>\n<\/blockquote>\n<p>Eemaldage kogu ravi aspekt ja teile j\u00e4\u00e4b &quot;teisene, \u2026 soovimatu m\u00f5ju&quot;. Olgu, siin on potentsiaalselt segadusttekitav osa:<\/p>\n<ul>\n<li>valime faili kaasamise,<\/li>\n<li>me teame, mida fail teeb,<\/li>\n<li>Seega, kui me teame, mida me kaasame <a href=\"https:\/\/php.net\/manual\/en\/function.include-once.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ja<\/a> mida see teeb, siis kuidas saab see tuua midagi ebasoovitavat?<\/li>\n<\/ul>\n<p>V\u00e4hemalt nii kuulen seda sageli k\u00fcsimas, kui r\u00e4\u00e4kida k\u00f5rvalm\u00f5judest. Programmeerimisel olen alati \u00fcldistanud k\u00f5rvalm\u00f5jusid kui k\u00f5ike, mis muudab programmi olekut.<\/p>\n<p>Piisavalt lihtne, eks?<\/p>\n<h3>WordPressi k\u00f5rvalm\u00f5jud<\/h3>\n<p>Oletame, et t\u00f6\u00f6tate WordPressiga, sest see on see, mida ma teen <a href=\"https:\/\/tommcfarlin.com\/tag\/wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ja kirjutan<\/a> \ud83d\ude42 ning meil on fail, mis vastutab alammen\u00fc\u00fc \u00fcksuse lisamise eest m\u00f5nda olemasolevasse tipptaseme men\u00fc\u00fcsse.<\/p>\n<p>See klass v\u00f5ib olla suhteliselt lihtne, kuna see murrab <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_submenu_page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00f5ige WordPressi API kutse<\/a>, k\u00e4ivitub, kui see on \u00fchendatud [\u00f5ige] konksuga, ja lisab seej\u00e4rel alammen\u00fc\u00fc, nagu ette n\u00e4htud.<\/p>\n<p>Kuid oletame, et see klass, klassi meetod v\u00f5i fail, mis lisab ka JavaScripti v\u00f5i stiile, mis muudavad alammen\u00fc\u00fc \u00fcksuse olekut nii, et see on esile t\u00f5stetud, k\u00e4itub nii, nagu oleks sellel &quot;kl\u00f5psatud&quot; v\u00f5i see teeb midagi, mida programm v\u00f5i kasutaja ei kavatse.<\/p>\n<p>See oleks k\u00f5rvalm\u00f5ju, kuna see muudab programmi olekut.<\/p>\n<h2>Mida peaks moodul tegema?<\/h2>\n<p>See klass ise peaks tegema <a href=\"https:\/\/en.wikipedia.org\/wiki\/Single_responsibility_principle\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00fchte asja<\/a> :<\/p>\n<blockquote>\n<p>\u00dchtse vastutuse p\u00f5him\u00f5te on arvutiprogrammeerimise p\u00f5him\u00f5te, mis s\u00e4testab, et iga moodul v\u00f5i klass peaks vastutama tarkvara pakutava funktsionaalsuse \u00fche osa eest ja see vastutus peaks olema t\u00e4ielikult klassifitseeritud.<\/p>\n<\/blockquote>\n<p>Aga kui me tutvustame midagi, mis t\u00e4iendab seda, mida see peaks tegema \u2013 kui lisame selle vastutust v\u00f5i muudame selle p\u00f5hilist asja \u2013, siis oleme kasutusele v\u00f5tnud k\u00f5rvalm\u00f5ju.<\/p>\n<p>Pidage meeles, et see ei ole oma olemuselt halb (vastavalt \u00fclaltoodud PSR-1 m\u00e4\u00e4ratlusele), kuid on oluline \u00e4ra tunda, millal me seda teeme ja millal mitte.<\/p>\n<h2>Niisiis, kuidas me funktsionaalsust lisame?<\/h2>\n<p>Ma arvan, et loomulik k\u00fcsimus on selles, et kui tahame lisada programmile funktsionaalsust, mis muudab selle olekut, siis kuidas me seda teeme (ja kas see on vale)?<\/p>\n<p>Esiteks, ei, see pole viga. Ma m\u00f5tlen, et programmidel on erinevatel asjadel erinevad olekud, eks? M\u00f5nikord juhtub see siis, kui midagi kirjutatakse kettale v\u00f5i andmebaasi; m\u00f5nikord juhtub see siis, kui kasutaja kl\u00f5psab kasutajaliidese elemendil jne.<\/p>\n<p>Kuid see, kuidas need seisundid juhtuvad, m\u00e4ngib k\u00f5rvaltoimete olemust.<\/p>\n<p>V\u00f5tke n\u00e4iteks alammen\u00fc\u00fc idee. See peaks tegema \u00fchte asja. See ei tohiks muuta midagi muud peale selle, mida me ekraanil n\u00e4eme.<\/p>\n<ul>\n<li>See ei tohiks andmebaasi kirjutada,<\/li>\n<li>See ei tohiks seadistada s\u00fcndmuste kuulajat, kui m\u00f5ni muu objekt lisab alammen\u00fc\u00fc,<\/li>\n<li>See ei tohiks muuta millegi endast v\u00e4ljaspool oleva esitusviisi.<\/li>\n<li>Ja nii edasi.<\/li>\n<\/ul>\n<p>Funktsionaalsuse lisamine toimib samamoodi: tutvustate klasse, mis vastutavad konkreetse asja tegemise eest, ja lasete neil seda teha. Kui need komponendid t\u00f6\u00f6tavad koos, on teil funktsionaalne programm, milles iga moodul (klass\/funktsioon\/mis iganes) j\u00e4\u00e4b nii-\u00f6elda oma rajale.<\/p>\n<h2>Mis on rusikareegel?<\/h2>\n<p>Olen kindel, et paljud teist, kes seda loevad, teavad, millised on k\u00f5rvaltoimed ja millised mitte. Ja nagu teil, on ka minul oma.<\/p>\n<p>M\u00f5elge sellele j\u00e4rgmiselt:<\/p>\n<p>Kui kutsute meetodit ja see tagastab v\u00e4\u00e4rtuse ja seej\u00e4rel kutsute meetodi uuesti sama andmekomplektiga, peaks see tagastama sama v\u00e4\u00e4rtuse.<\/p>\n<p>Nii teate, et teie funktsioonil, klassil v\u00f5i \u00fcldisel moodulil pole k\u00f5rvalm\u00f5jusid.<\/p>\n<p>Ja nagu iga asjaga, olen ma neid vigu teinud (ja t\u00f5en\u00e4oliselt j\u00e4tkan), kuid see on k\u00fcsimus, et p\u00fc\u00fcan seda mitte teha.<\/p>\n<p>L\u00f5puks saab sellest uus normaalsus.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Arutasin eelnevalt programmeerimise k\u00f5rvalm\u00f5jusid PSR-1 kontekstis. Kuid nende t\u00e4htsus ulatub kaugemale \u00fchest keelest ja \u00fcldisest programmeerimisest.<\/p>\n","protected":false},"author":1,"featured_media":223973,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,894],"tags":[1165],"class_list":["post-229196","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kood","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=229196"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229196\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/223973"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=229196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=229196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=229196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}