- Metaprogramming waxay u ogolaataa barnaamijyadu inay maamulaan oo wax ka beddelaan koodkooda wakhtiga runtime.
 - Waxaa jira dhowr nooc oo metaprogramming ah, sida milicsiga iyo wax-soo-saarka, oo leh aalado ku habboon luqadaha sida Python, Ruby ama JavaScript.
 - Waxay bixisaa dabacsanaan waxayna yaraynaysaa koodka soo noqnoqda, inkasta oo ay kordhin karto kakanaanta waxayna saameyn kartaa waxqabadka haddii aan si sax ah loo isticmaalin.
 

Metaprogramming waa fikrad soo jiidasho leh oo ku saabsan barnaamijyada casriga ah. Waxay ka kooban tahay awoodda barnaamijyada si ay wax uga beddelaan ama u abuuraan kood si firfircoon inta lagu jiro fulintooda, taas oo u oggolaanaysa hagaajinta hababka iyo abuurista xalal waxtar leh. Inkasta oo jaleecada hore ay u ekaan karto mid aan la taaban karin ama xitaa adag, fahamka waxay u furaysaa albaabka siyaabo cusub oo wax looga qabto dhibaatooyinka horumarinta.
Maqaalkan, waxaan si qoto dheer u baari doonaa waxa metaprogramming yahay, codsiyadiisa, faa'iidooyinka, iyo caqabadaha. Waxa kale oo aanu lafaguri doonaa kala duwanaanshaheeda iyo sida loogu fuliyo luuqado kala duwan, laga bilaabo kuwa caadiga ah ilaa kuwa firfircoon. Sidaa darteed, waxaan ogaan doonaa sida metaprogramming-gu uu u beddeli karo habka aan u qorno oo u fahamno koodka.
Waa maxay metaprogramming?
Metaprogramming waa farsamo u saamaxaysa barnaamijku inuu koodka ula dhaqmo xog ahaan. Tani waxay ka dhigan tahay in software-ku uu falanqeyn karo, wax ka beddeli karo, dhalin karo ama xitaa is-beddeli karo inta lagu jiro fulinta. Si fudud, waxaan dhihi karnaa waa "Barnaamij qora barnaamijyada". Habkani wuxuu fududeeyaa in si toos ah loo sameeyo hawlaha soo noqnoqda iyo abuurista xalal badan oo guud oo dabacsan.
Farsamadani waxay kasbatay muhiimad gaar ah luuqadaha firfircoon sida Python, Ruby o JavaScript, halkaas oo aad ka heli karto qalabka sida eval ama wakiilo, kuwaas oo awood u siinaya in si weyn loo isticmaalo koodhka wakhtiga runtime. Si kastaba ha ahaatee, waxay sidoo kale ku jirtaa luqadaha taagan sida C ++, inkastoo ay leeyihiin xaddidaadyo waaweyn.
Taariikhda iyo asalka metaprogramming
Fikradda metaprogramming maaha mid cusub. Waxay soo ifbaxday in ka badan 40 sano ka hor luqadaha sida carrab la'aan, hormuudka u ah bixinta agabka lagu maamulayo koodka xog ahaan. Kadib, Hadal yar waxay fikradan u qaaday heer cusub intii lagu jiray 80-meeyadii, waxayna ahayd sifo soo noqnoqota oo ku jirta luqado badan oo casri ah tan iyo markaas. In kasta oo luqadahani ay markii hore la kulmeen xaddidaadyo xagga waxqabadka ah, si weyn ayay u kobceen iyada oo ay ugu wacan tahay horumarka hardware-ka iyo kobcinta software-ka.
Tusaale ahaan, ka mid noqoshada Dadka xaaska ah y Dib-u-eegis en JavaScript ka ES6 lagu calaamadeeyay a ka hor iyo ka dib in ay awood metaprogramming. Sidoo kale, luqadaha sida Ruby y Python Waxay caan ka dhigeen isticmaalka walxaha sida qurxinta o macros, kaas oo fududeeya hawlaha metaprogramming si dareen leh oo awood leh.
Noocyada iyo farsamooyinka metaprogramming
Metaprogramming waxa loo kala saari karaa dhawr nooc iyadoo ku xidhan codsigiisa iyo wakhtiga la qabanayo. Waa kuwan kuwa ugu caansan:
Metaprogramming milicsi
Noocani waxa uu diiradda saarayaa awoodda barnaamijku u leeyahay in uu is baadho oo wax ka beddelo wakhtiga runtime. Tusaale ahaan, in JavaScript, isticmaalka shayga Reflect, qaabka gudaha ee walxaha kale waa la baari karaa.
- Isbarasho: Ku ogolanaya in aad falanqayso sifooyinka, hababka ama qaab-dhismeedka shay. Luqadaha firfircoon, tan waxaa loo isticmaalaa in lagu xaqiijiyo xogta ama lagu sameeyo xisaab hubinta code
 - Isbeddelka: Waxay tusinaysaa in barnaamijku bedeli karo xeerkiisa ama hab-dhaqankiisa marka uu socdo, inkasta oo farsamadan loo isticmaalo taxaddar.
 
Hal-abuurka metaprogramming
Habkani wuxuu diiradda saarayaa qorista koodka soo saara kood badan, ha ahaato wakhtiga la ururinayo ama wakhtiga la qabanayo. Tusaalaha caadiga ah ee Julia Waa makro @eval, kaas oo kuu ogolaanaya inaad abuurto habab si toos ah, yaraynta koodka soo noqnoqda.
Luuqadaha Gaarka ah ee Domain (DSLs)
Metaprogramming ayaa sidoo kale loo isticmaalaa si loo abuuro DSLs, kuwaas oo ah kordhinta yar yar ee luqadda aasaasiga ah ee loogu talagalay hawl gaar ah. Gudaha Ruby on RailsTusaale ahaan, waa wax caadi ah in la arko weedhaha sida validates_presence_of, kaas oo xogta u ansixiya si la akhriyi karo oo gaar ah.
Qalabka muhiimka ah iyo fikradaha luqado kala duwan
Metaprogramming maaha mid u gaar ah luuqad gaar ah, laakiin luuqad kastaa waxay ku fulisaa qalab gaar ah. Qaar ka mid ah kuwa khuseeya ayaa halkan lagu sharaxay:
JavaScript
En JavaScript, imaatinka ES6 Wuxuu la yimid qalab ay ka mid yihiin walxo Wakiil y Reflect, taas oo sahlaysa is-dhexgalka iyo wax-is-daba-marinta shayga:
- Wakiil: Waxay kuu ogolaanaysaa inaad ka hortagto hawlgallada sida meelaynta hantida ama habka wicitaanada, qeexida habdhaqanka caadiga ah ee habka.
 - Milicso: Waxay siisaa API-ga la falgalka guryaha shayga, fududaynta hawlihii hore ee u baahnaa kood faahfaahsan.
 
Python
En Python, metaprogramming waxa lagu suurtogeliyay iyada oo loo marayo xubno ay ka mid yihiin qurxinta y metaclasses:
- Qurxiyeyasha: Hawlaha wax ka beddelaya habdhaqanka shaqooyinka kale ama fasallada. Tusaale ahaan, in FlaskQurxiyeyasha waxaa loo isticmaalaa in lagu qeexo waddooyinka HTTP.
 - Qaybaha meta: Waa noocyo kala duwan. Waxay xakameeyaan sida fasallada loo abuuray waxayna bixiyaan heer dheeraad ah si ay u habeeyaan habdhaqanka barnaamijka.
 
Ruby
Ruby Waa mid ka mid ah luqadaha meesha ugu badan ee metaprogramming-ka lagu isticmaalo. Habkiisa eval Waa tusaale cad oo ku saabsan sida ay si firfircoon u soo saarto xiisadaha inta lagu jiro fulinta barnaamijka. Intaa waxaa dheer, milicsiga in Ruby wuxuu kuu ogolaanayaa inaad si fudud u baarto hababka iyo sifooyinka shay.
Faa'iidooyinka metaprogramming
Qaadashada farsamooyinka metaprogramming waxay keenaysaa dhowr faa'iidooyin oo muhiim ah:
- Yaraynta kood soo noqnoqda: Hawlo badan oo soo noqnoqda ama la mid ah ayaa si toos ah loo samayn karaa.
 - dabacsanaan weyn: Waxay u ogolaataa in dhibaatooyinka lagu xalliyo si ka badan oo la qabsan karo oo guud.
 - Koodh aad loo akhriyi karo: Abstraction waxay hagaajisaa fahamka koodka iyo akhrinta.
 
Caqabadaha iyo taxaddarrada
Inkastoo faa'iidooyinkeeda, metaprogramming-ku maaha mid caqabado la'aan ah. Kuwa ugu waaweyn waxaa ka mid ah:
- Kakanaanta: Koodhka metaprogramming way adkaan kartaa in la fahmo lana ilaaliyo.
 - Saamaynta Waxqabadka: Abuuritaanka iyo wax ka beddelka koodka wakhtiga runtime waxay hoos u dhigi kartaa barnaamijkaaga.
 
Metaprogramming waa qalab awood leh oo, marka si sax ah loo isticmaalo, bedeli kara habka aan u horumarino una ilaalino software. Marka la fahmo aasaaskeeda, xaddidaadaha, iyo codsiyada, horumariyayaashu waxay ka faa'iidaysan karaan faa'iidooyinkeeda iyaga oo aan waxyeello u geysan tayada koodhka iyo waaritaanka.