Magik (programming language)
મેજિક એક ઓબ્જેક્ટ-ઓરિએન્ટેડ પ્રોગ્રામિંગ લેંગ્વેજ છે જે બહુવિધ વારસો અને બહુરૂપતાને ટેકો આપે છે, અને તે ગતિશીલ રીતે ટાઇપ કરવામાં આવે છે. સ્મોલવર્લ્ડ જિયોગ્રાફિક ઇન્ફર્મેશન સિસ્ટમ (GIS) ના ભાગરૂપે સ્મોલવર્લ્ડ સિસ્ટમ્સ લિમિટેડના આર્થર ચાન્સ દ્વારા 1989માં તેની રચના અને અમલ કરવામાં આવ્યો હતો. 2000 માં સ્મોલવર્લ્ડના સંપાદન પછી, મેજિક હવે જીઇ એનર્જી દ્વારા પ્રદાન કરવામાં આવે છે, જે હજુ પણ તેના સ્મોલવર્લ્ડ ટેક્નોલોજી પ્લેટફોર્મના ભાગ રૂપે છે. મેજિક (પ્રેરણાદાયી મેજિક) મૂળરૂપે 1990 માં રજૂ કરવામાં આવ્યું હતું અને વર્ષોથી તેમાં સુધારો અને સુધારા કરવામાં આવ્યા છે. તેનું વર્તમાન સંસ્કરણ 5.2 છે. જુલાઈ 2012 માં, મેજિક વિકાસકર્તાઓએ જાહેરાત કરી હતી કે તેઓ જાવા વર્ચ્યુઅલ મશીન પર મેજિક ભાષાને પોર્ટ કરવાની પ્રક્રિયામાં છે. તે જ વર્ષે નવેમ્બરમાં ઓરેકલ કોર્પોરેશન દ્વારા સફળ પોર્ટિંગની પુષ્ટિ કરવામાં આવી હતી. સ્મોલટૉક મેજિક સાથેની સામ્યતાઓ તેની ભાષાની લાક્ષણિકતાઓ અને તેની સ્થાપત્યની દ્રષ્ટિએ સ્મોલટૉક સાથે કેટલીક સામ્યતા ધરાવે છેઃ મેજિક ભાષાને મેજિક વર્ચ્યુઅલ મશીન દ્વારા અર્થઘટન કરાયેલ બાઈટ કોડમાં સંકલિત કરવામાં આવે છે. મેજિક વર્ચ્યુઅલ મશીન માઇક્રોસોફ્ટ વિન્ડોઝ, યુનિક્સ અને લિનક્સના વિવિધ સ્વાદો સહિત અનેક પ્લેટફોર્મ પર ઉપલબ્ધ છે. મેજિક કન્સોલ આધારિત છે અને એપ્લિકેશન ચાલી રહી હોય ત્યારે પણ કોડમાં ફેરફાર કરી શકાય છે. કન્સોલનો ઉપયોગ મેજિક કોડ ચલાવવા અને પરિણામો જોવા માટે પણ થઈ શકે છે. સંકલિત કોડ એક જ ફાઇલમાં સંગ્રહિત થાય છે જેને છબી ફાઇલ કહેવાય છે. દરેક છબી ફાઇલ સંકલિત બાઈટ-કોડ અને સત્રની સ્થિતિ (ઉદાહરણ તરીકે ચલ મૂલ્યો) ધરાવે છે જ્યારે છબી છેલ્લે સાચવવામાં આવી હતી. ભાષા લક્ષણો ટિપ્પણીઓ મેજિક ટિપ્પણીઓ તરીકે કોડના વિભાગોને ચિહ્નિત કરવા માટે #ટોકનનો ઉપયોગ કરે છેઃ #આ એક ટિપ્પણી છે. સોંપણીઓ મેજિક સોંપણીઓ કરવા માટે <<ઓપરેટરનો ઉપયોગ કરે છેઃ a <<1.234 b <<b + a c <<"ફૂ" + "બાર" #કોનકેટ શબ્દમાળાઓ સ્પષ્ટતા માટે, આ સંકેતને "a બને છે 1.234" અથવા "b બને છે b વત્તા a" તરીકે વાંચવામાં આવે છે. આ પરિભાષા સોંપણીને સરખામણીથી અલગ પાડે છે. મેજિક આ ઓપરેટરની સંકુચિત વિવિધતાને પણ ટેકો આપે છે જે C: b + <<a #સમકક્ષ b <<b + a માં જોવા મળતી સમાન રીતે કામ કરે છે ચલ છાપવા માટે તમે નીચે આપેલા આદેશનો ઉપયોગ કરી શકો છો a <<"નમસ્તે" લખો (a) પ્રતીકો તેમજ પૂર્ણાંકો, ફ્લોટ્સ અને સ્ટ્રિંગ્સ જેવા પરંપરાગત ડેટા પ્રકારો મેજિક પણ પ્રતીકોનો અમલ કરે છે. પ્રતીકો એ એક ખાસ ટોકન ડેટા પ્રકાર છે જેનો ઉપયોગ વસ્તુઓને અનન્ય રીતે ઓળખવા માટે સમગ્ર મેજિકમાં વ્યાપકપણે થાય છે. તેઓ કોલોન દ્વારા રજૂ થાય છે અને ત્યારબાદ અક્ષરોની એક સ્ટ્રિંગ આવે છે. ઊભી પટ્ટીના અક્ષરનો ઉપયોગ કરીને પ્રતીકોમાંથી છટકી શકાય છે. ઉદાહરણ તરીકેઃ a <<: નમસ્તે #જ્યારે પણઃ હેલો આવે છે, ત્યારે તે એ જ ઉદાહરણ છે b <<: |hello વર્લ્ડ | ડાયનેમિક ટાઇપિંગ મેજિક વેરિયેબલ્સ ટાઇપ કરવામાં આવતા નથી કારણ કે તેઓ C #કહે છે અને રનટાઇમ પર વિવિધ ઓબ્જેક્ટ્સનો સંદર્ભ આપી શકે છે. મેજિકમાં બધું એક ઓબ્જેક્ટ છે (ઓબ્જેક્ટ અને પૂર્ણાંકો જેવા આદિમ પ્રકારો વચ્ચે કોઈ તફાવત નથી): એક <<1.2 #ફ્લોટિંગ પોઇન્ટ નંબર ચલ 'a' a <<1.2 "#ને પાછળથી સોંપવામાં આવે છે, એક શબ્દમાળા ચલ 'a' ને સોંપવામાં આવે છે. ઉદાહરણોમાં જાવા જેવી અન્ય પ્રોગ્રામિંગ ભાષાઓના વર્ગો સાથે સમાનતા છે, પરંતુ તેમાં મહત્વપૂર્ણ તફાવતો છે. મેજિક બહુવિધ વારસાને ટેકો આપે છે, અને મિક્સિન (જે કોઈ ડેટા વિના કાર્યક્ષમતાને અમલમાં મૂકે છે). નવા ઉદાહરણો હાલના ઉદાહરણની ક્લોનિંગ દ્વારા બનાવવામાં આવે છે (જે સામાન્ય રીતે ઉદાહરણ હશે પરંતુ તે હોવું જરૂરી નથી). ડેફ સ્લૉટેડ _ ઈમ્પ્લેમર () નિવેદનનો ઉપયોગ કરીને નવા ઉદાહરણો બનાવવામાં આવે છે, ઉદાહરણ તરીકેઃ ડેફ સ્લૉટેડ _ ઈમ્પ્લેમર (: માય ઓબ્જેક્ટ, {{: સ્લોટ _ એ, 34}, {: સ્લોટ _ બી, "હેલો"}, {: પેરેન્ટ _ ઓબ્જેક્ટ _ એ,: પેરેન્ટ _ ઓબ્જેક્ટ _ બી) આ કોડ ટુકડો માય ઓબ્જેક્ટ તરીકે ઓળખાતા નવા ઉદાહરણને વ્યાખ્યાયિત કરશે જેમાં સ્લોટ _ એ (34 માટે પૂર્વ-પ્રારંભિક) અને સ્લોટ _ બી ("હેલો" માટે પૂર્વ-પ્રારંભિક) નામના બે સ્લોટ (અથવા ક્ષેત્રો) છે જે પેરેન્ટ _ ઓબ્જેક્ટ _ એ અને પેરેન્ટ _ ઓબ્જેક્ટ _ બી તરીકે ઓળખાતા બે અસ્તિત્વમાંના ઉદાહરણોમાંથી વારસામાં મળે છે. સરખામણી મેજિક સરખામણી માટે તમામ સામાન્ય લોજિકલ ઓપરેટરો (=, <, <=,>,> =, ~ =/<>) તેમજ કેટલાક અસામાન્ય ઓપરેટરોને અમલમાં મૂકે છે. 'છે' અને 'નથી' ઓપરેટર્સનો ઉપયોગ મૂલ્યોને બદલે ઓબ્જેક્ટ અથવા ઓબ્જેક્ટ સંદર્ભોના ચોક્કસ ઉદાહરણોની સરખામણી કરવા માટે થાય છે. ઉદાહરણ તરીકેઃ a <<"નમસ્તે" b <<<"નમસ્તે" a = b #એ સાચું (_ સાચું) આપે છે કારણ કે a અને b ની કિંમતો a _ is b #બરાબર છે અને a એ b <<"નમસ્તે" b <<a = b #એ સાચું (_ સાચું) આપે છે તેવું જ ઉદાહરણ નથી કારણ કે a અને b ની કિંમતો a _ is b #બરાબર છે અને તે સાચું (_ સાચું) આપે છે કારણ કે b ને a ની કિંમતને બદલે a તરીકે સમાન પદાર્થનું ચોક્કસ ઉદાહરણ સોંપવામાં આવ્યું હતું. પદ્ધતિઓ પદ્ધતિઓને સ્ટેટમેન્ટ _ મેથડ અને _ એન્ડમેથોડઃ _ મેથડ my_object.my_method (a, b) _ રિટર્ન a + b _ એન્ડમેથોડનો ઉપયોગ કરીને ઉદાહરણો પર વ્યાખ્યાયિત કરવામાં આવે છે. #નવી મેથડ _ મેથડ person.new (નામ, ઉંમર) _ રિટર્ન _clone.init (નામ, ઉંમર) _ એન્ડમેથોડ #ઇનિશિયલાઇઝ મેથડ. ખાનગી પદ્ધતિ person.init (નામ, ઉંમર) #પેરેન્ટ અમલીકરણને કૉલ કરો. _super.init (નામ, ઉંમર) #સ્લોટ શરૂ કરો. . નામ <<નામ. ઉંમર <<ઉંમર _ રીટર્ન _ સેલ્ફ _ એન્ડમેથોડ ક્લોન વ્યક્તિ ઓબ્જેક્ટની ભૌતિક નકલ બનાવે છે. સુપર સ્ટેટમેન્ટ ઓબ્જેક્ટ્સને પેરેન્ટ ઉદાહરણ પર પદ્ધતિનું અમલીકરણ કરવાની મંજૂરી આપે છે. ઓબ્જેક્ટ્સ સ્વ-નિવેદનનો ઉપયોગ કરીને પોતાને સંદર્ભિત કરી શકે છે. ઑબ્જેક્ટના સ્લોટને ડોટ નોટેશનનો ઉપયોગ કરીને એક્સેસ કરવામાં આવે છે અને સોંપવામાં આવે છે. પદ્ધતિઓ કે જે ઓબ્જેક્ટના જાહેર ઇન્ટરફેસનો ભાગ નથી, તેને ખાનગી નિવેદનનો ઉપયોગ કરીને ખાનગી ચિહ્નિત કરી શકાય છે. ખાનગી પદ્ધતિઓને ફક્ત _ સેલ્ફ, _ સુપર અને _ ક્લોન દ્વારા જ બોલાવી શકાય છે. વૈકલ્પિક દલીલો વૈકલ્પિક નિવેદનનો ઉપયોગ કરીને જાહેર કરી શકાય છે. વૈકલ્પિક દલીલો કે જે પસાર થતી નથી તે મેજિક દ્વારા વિશેષ ઓબ્જેક્ટ _ અનસેટ (નલની સમકક્ષ) ને સોંપવામાં આવે છે. એકત્રિત નિવેદનનો ઉપયોગ વૈકલ્પિક દલીલોની સૂચિ જાહેર કરવા માટે થઈ શકે છે. _ મેથડ my_object.my_method (_ ગેધર વેલ્યુઝ) _ એન્ડમેથોડ પુનરાવૃત્તિ મેજિકમાં, _ ફોર, _ ઓવર, _ લૂપ અને _ એન્ડલોપ સ્ટેટમેન્ટ પુનરાવર્તનને મંજૂરી આપે છે. બ્લોક લોકલ s <<0 _ લોકલ i <<0 _ જ્યારે i <= 100 _ લૂપ s + <<i i + <<1 _ એન્ડલોપ>> s _ એન્ડબ્લોક અહીં, જ્યારે તે _ લૂપ અને _ એન્ડલોપ સાથે જોડાય છે. _ મેથડ my_object.my_method (_ ગેધર વેલ્યુઝ) કુલ <<0.0 _ માટે a _ ઓવર values.elements () _ લૂપ કુલ + <<a _ એન્ડલોપ _ રીટર્ન કુલ _ એન્ડમેથોડ m <<<my_object.new () x <<m.my_method (1.0,2,3,4) #x = 10.0 અહીં values.elements () એક ઇટરેટર છે જે મૂલ્યોને પુનરાવર્તિત કરવામાં મદદ કરે છે. મેજિક જનરેટર પદ્ધતિઓને ઇટરેટર પદ્ધતિઓ કહેવામાં આવે છે. નવી ઇટરેટર પદ્ધતિઓને _ iter અને _ લૂપબોડી સ્ટેટમેન્ટનો ઉપયોગ કરીને વ્યાખ્યાયિત કરી શકાય છેઃ _ iter _ મેથડ my_object.even_elements () _ માટે a _ ઓવર _self.elements () _ લૂપ _ જો a.even? _ is _ ટ્રૂ _ પછી _ લૂપબોડી (a) _ એન્ડિફ _ એન્ડલુપ _ એન્ડમેથોડ પ્રક્રિયાઓ મેજિક પણ પ્રક્રિયાઓ તરીકે ઓળખાતા કાર્યોને ટેકો આપે છે. પ્રક્રિયાઓ પણ ઓબ્જેક્ટ છે અને તે _ reproc અને _ એન્ડપ્રોક સ્ટેટમેન્ટનો ઉપયોગ કરીને જાહેર કરવામાં આવે છે. પ્રક્રિયાઓ એવા ચલોને સોંપવામાં આવે છે જે પછી લાગુ કરી શકાય છેઃ માય _ પ્રોસિજર <<_ પ્રોસીજર @my_procedure (a, b, c) _ રીટર્ન a + b + c _ એન્ડપ્રોક x <<માય _ પ્રોસિજર (1,2,3) #x = 6 રેગ્યુલર એક્સપ્રેશન મેજિક આધાર આપે છે// રેગ્યુલર એક્સપ્રેશન વાક્યરચનાઃ _ ઇફ/હેલો, \s (\w) +!/. મેળ ખાય છે? ("હેલો, મેજિક!") પછી લખો ("મેળ પડ્યો!") એન્ડિફ અને રેગેક્સમાં જૂથોને કેપ્ચર કરવા માટેઃ/સ્વ ([0-9] +)-([0-9] +). */. બધા બદલો ("સ્વ 65456-324 sss", "$1") #"65456"/સ્વ ([0-9] +)-([0-9] +). */. પ્રતિસ્થાપન _ બધા ("સ્વ 65456-324 sss", "$2") #"324" HTTP લાઇબ્રેરી મેજિક HTTP લાઇબ્રેરી દ્વારા HTTP અથવા HTTPS વિનંતીઓ કરવાનું સમર્થન કરે છે, નીચે આપેલા ઉદાહરણો જુઓઃ મેગીખત્પ <<http.new () magikhttp.url ("https://www.google.com"). ગેટ () magikhttp.url ("https://www.google.com"). પોસ્ટ ({"વપરાશકર્તા-એજન્ટ", "બોટ"}, "અમુક ડેટા") ભાષા ક્વિક્સ કારણ કે મેજિક મૂળરૂપે ઇંગ્લેન્ડમાં વિકસાવવામાં આવ્યું હતું, મુખ્ય નાની દુનિયાના પુસ્તકાલયોમાં પદ્ધતિઓ બ્રિટિશ અંગ્રેજીનો ઉપયોગ કરીને જોડવામાં આવે છે. ઉદાહરણ તરીકેઃ "આરંભ કરો" નો ઉપયોગ કરો, "આરંભ કરો" નો નહીં. અન્ય પ્રોગ્રામિંગ લેંગ્વેજની જેમ મેજિક પાસે પણ સંગ્રહો છે. તેમાં નીચેનાનો સમાવેશ થાય છેઃ સિમ્પલ વેક્ટર રોપ હેશ ટેબલ પ્રોપર્ટી લિસ્ટ ઇક્વાલિટી સેટ બેગ્સ હેલો વર્લ્ડ ઉદાહરણ નીચે મુજબ મેજિકમાં લખાયેલા હેલો વર્લ્ડ પ્રોગ્રામનું ઉદાહરણ છેઃ લખો ("હેલો વર્લ્ડ!") સંદર્ભો બાહ્ય લિંક્સ સ્મોલવર્લ્ડ પ્રોડક્ટ સ્યુટ ટેક્નોલોજી એમ. ડી. ટી.-જી. ઈ. સ્મોલવર્લ્ડ જી. આઈ. એસ. ડેવલપર્સ માટે મેજિક ડેવલપમેન્ટ ટૂલ્સ આઇ. ડી. ઈ. ઓપન સોર્સ (સોર્સફોર્જ) મેજિક ટેકનિકલ પેપર નં. 5-સ્મોલવર્લ્ડ મેજિક જીઇ સ્મોલવર્લ્ડનું વિહંગાવલોકન, મેજિક ડેવલપર્સ માટે ઈમેક્સ એક્સ્ટેન્શન્સ સ્મોલવર્લ્ડ મેજિક પ્રોગ્રામિંગ લેંગ્વેજ માટે વિઝ્યુઅલ સ્ટુડિયો કોડ એક્સ્ટેંશન. વર્ગ-આધારિત પ્રોગ્રામિંગ ભાષાઓ ગતિશીલ રીતે ટાઇપ કરેલી પ્રોગ્રામિંગ ભાષાઓ