“Ruby” PD Funksiýalar (Functions in Ruby)
Salam hormatly okyjylar ! Bu günki ýazgymyzda, kod ýazmagy ýeňilleşdirýän, optimizirleşdirýän we tizleşdirýän düşünjäniň üstünde durmagy meýilleşdirýärin. Programmirlemede müňlerçe setiri belki onlarça setire çenli azaldýan esasy zat ‘funksiýalar’-dyr.
Ýagdaýa baglylykda, PD tarapyndan eýýäm standart girizilen funksiýalar (built-in functions) bar we ulanyjy tarapyndan, öz zerurlygyna görä ýazýan (user-defined functions) funksiýalary bar. Bu ýazgymyzda esasy üstünde durjak mowzugymyz, ulanyjy tarapyndan beýan edilen funksiýalar (user-defined functions) bolar.
Funksiýa näme diýmek / nämä gerek ?
Funksiýalar, programmirlemede ýerine ýetirýän işlerimizi ençeme ýeňilleşdirýär. Funksiýalar, gaýtadan birnäçe gezek ulanýan kod bölegimizi ýeňillik bilen çagyrmaga we ulanmaga mümkinçilik döredýär. Olar bolmadyk bolsa, bir bölek işi ýerine ýetirýän, köp setirlik ýazýan kodumyzy, her zerur bolan ýagdaýynda gaýtadan ýazmaga mejbur bolardyk.
Gysgaça aýdylanda funksiýa, atlandyrylan, ýagny at goýlan bir kod bölegi. Geliň funksiýalaryň esasy aýratynlyklaryny gözden geçireliň :
- Funksiýanyň gaýtalanmaýan (unique) ady bolýar;
- Funksiýa giriş maglumatlar alyp bilýär;
- Funksiýa netije gaýtaryp bilýär.
Funksiýa we Prosedura : ‘Funksiýa’ sözi aslynda programmirlemä matematikadan girizilen. Aslyna seretsek, matematikada funksiýanyň hökman gaýtarýan netijesi bolýar. Şuňa baglylykda hem öňki PD ‘netije gaýtarýan’ we ‘netije gaýtarmaýan’ atlandyrylan kod bölekleri ‘funksiýa’ we ‘prosedura’ diýlip aýratyn seredilýärdi. Emma soňky PD bu tapawutlandyrma birbada galdy w ählisi funksiýa diýlip atlandyrylyp başlandy.
Giriş maglumatlar: Ýerine ýetirýän işiňize baglyglykda, bir hasaplamany ýerine ýetirmek üçin käbir ýagdaýda giriş maglumatlar zerur bolup durýar. Mysal üçin :
- At bilen ýüzlenip salamlaşmak üçin garşydakynyň adyny bilmek zerur;
- Şereketiň ilerleýändigini ýa-da yza galýandygyny hasaplamak üçin aýlyk girdeji maglumatlary zerur;
- Dükanyň hepdelik girdejisini hasaplamak üçin satylan harytlaryň mukdary we olaryň birlik bahalary zerur.
Edil şular ýaly hem, programmirlemede, käbir ýagdaýlarda hasaplamalar ýerine ýetirmek üçin giriş, ýagny başlangyç maglumatlar zerur bolup durýar. Bulara, ýagdaýa balylykda ‘parametr’ we ‘argument’ ady berýärler.
Funksiýalar yglan edilende, beriljek giriş maglumatlar, ýagny ‘parametrler’, funksiýanyň adyndan soň tegelek ýaýlaryň içinde, arasynda otur goýlup sanawy berilýär. Funksiýa ulanylanda, çagyrylanda bolsa ol giriş maglumatlara ‘argument’ ady berilýär.
Gaýtarýan netijesi : Ýokarda agzaýşymyz ýaly, käbir ýagdaýda kod bölegi netije gaýtarýar, käbir ýagdaýda bolsa gaýtarmaýar. Netije gaýtaran ýagdaýynda, gaýtarylýan netijäniň öňünde adaty ýagdaýda ‘return’ (ýagny gaýtar) rezerwirlenen sözi ulanylýar.
Mysal funksiýalar
Ýokarda agzalan giriş ýazylardan soň geliň birnäçe mysal funksiýa göreliň :
# Giriş maglumat almaýan we netije gaýtarmaýan funksiýa
def salamlash
puts "Hello Ruby"
endsalamlash() # "Hello Ruby"
Ýokardaky funksiýamyz ne netije alýar, ne-de netije gaýtarýar. Geliň indi ýokarky funksiýany azajyk üýtgedeliň, ýagny oňa giriş maglumat bereliň :
# Giriş maglumat alýan emma netije gaýtarmaýan funksiýa
def salamlash(at)
puts "Hello #{at}"
endsalamlash("Sapar") # "Hello Sapar"
Geliň indi hem giriş maglumat alýan hem-de netije gaýtarýan funksiýa kiçiräk mysal göreliň :
# Giriş maglumat alýan we netije gaýtarýan funksiýa
def salamlash(at)
return "Hello #{at}"
endsalamlash("Sapar") # Ekrana hiç zat çykarmaýar
# Ekrana çykarmak üçin, biz bu funksiýadan
# gaýtarylan netijäni 'puts' funksiýasyna bermeli.puts salamlash("Serdar") # Ekrana "Hello Serdar" çykarylar.
Soňky mysalda görşümiz ýaly, ‘at’- bu funksiýanyň parametri, ‘Sapar’ we ‘Serdar’ bolsa funksiýanyň argumenti, ýagny olar funksiýa çagyrylanda berilýän giriş maglumatlar.
Fuksiýanyň argumentleri/parametrleri we gaýtarýan netijesi
Funksiýa birnäçe giriş maglumat berýän bolsaňyz, olary bellenen tertipde, otur belgisi bilen bölüp sanamaly bolýarys. Iň möhüm zat, funksiýanyň beýanynda görkezişimiz ýaly, funksiýa çagyrylanda hem edil şol bir tertipde giriş maglumat bermeli boýlarys. Ýagny, ilki at soň familiýa görkezilen bolsa, funksiýa çagyrylanda hem ilki at soň familiýa bermeli. Mysal üçin:
def salamlash(at, familiya, yash)
puts "Salam #{at} #{familiya}, Siz #{yash} ýaşyňyzda"
endsalamlash("Atageldi", "Saparow", 18)
# "Salam Atageldi Saparow, Siz 18 ýaşyňyzda"salamlash(18, "Atageldi", "Saparow")
# "Salam 18 Atageldi, Siz Saparow ýaşyňyzda"
# Bu mysalda argumentler ters tertipde berlen.
Maglumat görnüşlerine has üns berýän programmirleme dillerinde, parametriň ýany bilen onuň haýsy maglumat görnüşine degişlidigi, ýagny ‘integer’, ‘string’, ‘character’, ‘boolean’ görkezilýär. Käbir PD, funksiýanyň beýanyna görä görkezlin görnüşde maglumatlar berilmese, programma hem işlemän, kompilýator ýalňyşlyk bardygyny habar berýär.
“Ruby”, “Python” we ş.m. soňky döwrebap dillerde bu zerurlyk aýrylýar. Dogry maglumat bermek we ony sazlamak programmirleýjiniň üstüne düşýär.
Funksiýadan netije gaýtarmak, ýokarda agzaýşymyz ýaly her ýagdaýda bolup durmaýar. Ýüze çykan ýagdaýynda bolsa adaty ýagdaýda ‘return’ sözjügi ulanylýar. Emma “Ruby” PD funksiýanyň içindäki kod böleginiň soňky maglumaty netije hökmünde gaýtarylýar. Bu bolsa programmirleýjä belli bir ýeňillikler döredýär. Emma öňki sintaksise öwrenişip, ‘return’ sözjügini hökman ýazýan programmirleýjiler hem az däl. Mysal :
def check_print(birlik_baha, mukdar)
return birlik_baha*mukdar
end# 3.5 manatlyk birlik bahadan 4 sany haryt satylypdyr.
puts check_print(3.5, 4) # Ekrana '14.0' çykarylar.def check_print_2(birlik_baha, mukdar)
"lala lala"
birlik_baha*mukdar
end# 3.5 manatlyk birlik bahadan 4 sany haryt satylypdyr.
puts check_print_2(3.5, 4) # Ekrana '14.0' çykarylar.
# Soňky setirde 'birlik_baha*mukdar' duransoň, şol hem gaýtarylýar.
“Built-in” (Öňden düzülen/girizilen) funksiýalar
Programmirleýjiniň ýükün ýeňilleşdirmek üçin, programma ýazma işini tizleşdirmek üçin ähli dillerde hem öňünden girizilen, ulanylmaga taýýar funksiýalar bar. Bularyň kömegi bilen esasy ýerine ýetirmeli işimizi ýerine ýetirip bilýäris. Bular bolmadyk bolsa has hem işimiz kyn bolardy.
Ähli PD, matematiki operasiýalar, ýazgylar bilen işleşmek üçin we ş.m. ençeme taýýar funksiýalar bar. Geliň “Ruby” PD degişli birnäçe mysal taýýar funksiýalar göreliň :
# Ähli harplary uly harplara öwürýän funksiýa 'capitalize'
"hello".capitalize # "HELLO"# Maglumaty ýazga öwürýän funksiýa 'to_s'
25.to_s # "25"# Berlen sanyň 2-nji derejeli köküni gaýtarýan funksiýa 'sqrt'
Math.sqrt(25) # 5
Bu gören mysallarymyza meňzeş ýene-de ýüzlerçe taýýar funksiýa bar. Bularyň sanlary we atlary PD görä üýtgeýär. Emma esasy köplügiň ulanýan funksiýalary ähli PD adat boýunça girizilýär. Galan funksiýalary isleseňiz, degişli PD dokumentasiýa web sahypasynda bir-birden gözden geçirip bilersiňiz.
Şeýlelik bilen, “Ruby” PD funksiýalary ýazmagy hem öwrendik. Diýmek, mundan beýläk biziň kodumyz has gysgaldylan, optimizirlenen we gözelleşdirilen bolar. Owdan kod ýazmak hem aýratyn bir sungat bolandygy sebäpli, kod ýazmakda ussatlaşmagy hiç haçan bes etmäň. Her gün täze zat öwrenmek bilen, her indiki gün bir öňki günden ilerde boluň. Şu günlikçe hoş sagboluň. Üstünlikler !