7. Funksiyalar


Download 98.33 Kb.
bet1/5
Sana12.03.2023
Hajmi98.33 Kb.
#1264437
  1   2   3   4   5
Bog'liq
07.Funksiyalar

7. Funksiyalar


Funksiya – dasturning ihtiyoriy joyidan bir nech bor chaqirish mumkin boʻlgan kod qismi. Yuqorida koʻrib oʻtilgan mavzularda standart kutubxona tarkibiga kiruvchi biriktirilgan funksiyalardan bir necha bor foydalanildi. Masalan, strlen() funksiyasi yordamida C-satrdagi belgilar soni olindi. Bu boʻlimda dastgur kodining ortiqchaligini kamaytirish imkonini beruvchi va tarkiblanganlik darajasini orttirish uchun xizmat qiluvchi foydalanuvchi funksiyalarini koʻrib oʻtamiz.

7.1. Funikiyani yaratish va chaqirish


Funksiyaning bayoni ikki qismdan iborat: e’lon va aniqlanish. Funksiyani e’lon qilish (funksiyaning prototipi deb ham ataladi) tip haqidagi ma’lumotni oladi. Axborotni olgan kompilyator tipning va parametrlar sonining mos kelmasligini aniqlashi mumkin. Funksiya prototipi formati quyidagicha:
tipi> nomi>([ [
nomi1>]
[, ..., [
nomiN>]]]);
tipi> parametri funksiya return operatori yordamida qaytaradigan qiymat tipini beradi. Agar funksiya qiymat qaytarmasa, tip oʻrniga void kalit soʻzi koʻrsatiladi.
Funksiya nomi, o‘zgaruvchilar nomlariga qo‘yiladigan talablar kabi, mumkin bo‘lgan identifikator bo‘lishi kerak. Funksiya nomidan keyin qavs ichida tipi va vergullar bilan ajratilgan holda parametrlar nomlari ko‘rsatiladi. Funksiya prototipidagi parametrlarni umuman ko‘rsatmaslik ham mumkin, chunki kompilyatorni faqat berilganlar tipi va parametrlar soni qiziqtiradi. Funksiya parametrga ega bo‘lmasa, faqat qavslar yoki qavs ichida void kalit so‘zi ko‘rsatiladi (C tilida void kalit so‘zi majburiy hisoblanadi). Funksiya e’lonidan keyin nuqtali vergul turishi kerak. Funksiyani e’lon qilishga misol:
int sum(int х, int у); // yoki int sum(int, int);
void print(const char *str); // yoki void print(const char *);
void print_ok(); // yoki void print_ok(void);
Funksiya aniqlanishi tip bayoni va parametr nomi, hamda amalga oshirilishini oladi. Funksiyaning aniqlanishi quyidagicha formatga ega:
tipi> nomi>([ [
nomi1>]
[, ..., [
nomiN>]]) {
tanasi>
[return[ qiymat>];]
}
Funksiyaning aniqlanishida, prototipdan farqli ravisha, lokal o‘zgaruvchi hisoblanuvchi parametrning nomini ko‘rsatish majburiy. Bu o‘zgaruvchi funksiya chaqirilganda yaratiladi, funksiyadan chiqilgandan keyin o‘chiriladi. Lokal o‘zgaruvchining nomi global o‘zgaruvchi bilan mos kelsa, u hoda barcha amallar lokal o‘zgaruvchi bilan amalga oshiriladi, global o‘zgaruvchining qiymati o‘zgarmaydi. Bunda global o‘zgaruvchiga murojaat qilish uchun nomdan oldin "::" operatorini ko‘rsatish zarur.
int sum(int х, int у) {
int z = х + у; // "х" lokal o'zgaruvchisiga murojaat
z = ::х + у; // "х" global o'zgaruvchisiga murojaat
return z;
}
Parametrlar bayonidan sog, figurali qavs ichida funksiyaning har bir chaqirilishida bajariluvchi ko‘satmalar joylashadi. Har qanday holatda ham (tanada bitta ko‘rsatmadan iborat bo‘lsa ham) figurali qavslar ko‘rsatiladi. Yopiluvchi qavsdan keyin nuqtali vergul qo‘yilmaydi.
Funksiyadan qiymat qaytarish uchun return operatoridan foydalaniladi. Bu operator bajarilganidan so‘ng, funksiyaning bajarilishi to‘xtaydi va boshqaruv funksiyani chaqirish nuqtasiga uzatiladi. Demak, return opeatoridan keyin joylashgan ko‘rsatmalar bajarilmaydi. return operatoridan foydalanishda turlicha vaziyatlar bo‘lmasligi lozim. Masalan, quyidagi holatda qaytariluvchi qiymat qo‘yilgan shartga bog‘liq.
int sum(int х, int у) {
if > 0) {
return х + у;
}
}
Agar 'х' ozgaruvchi noldan katta qiymatga ega bolsa, hammasi joyida, aks holda qaytariluvchi qiymat aniqlanmagan va funksiya tasodifiy qiymat (“musordeb nomlanuvchi) qaytaradi. Bunday holda kompilyatsiya jarayonida ogohlantiruvchi xabar chiqadi: “warning С4715 sum значение возвращается не при всех путях выполнения”. Bunday turlilikni chetlab o‘tish uchun funksiya tanasi oxirida ko‘rsatilmagandagi qiymat bilan return operatorini qo‘yish tavsiya qilinadi:
int sum(int х, int у) {
if > 0) {
return х + у;
}
return 0;
}
Funksiya nomidan oldin void kalit so‘zi ko‘rsatilgan bo‘lsa, return operatori bo‘lmasligi mumkin. Ammo, funksiyaning bajarilishini muddatidan oldin tugallash zarur bo‘lsa, u holda return operatori qaytariluvchi qiymatsiz ko‘rsatiladi. Masalan,
void print_ok() {
cout << "OK" << endl;
return; // Funksiyaning bajarilishini muddatidan oldin tugallash
cout << "Bu ko'rsatma hech qachon bajarilmaydi"
}
Funksiya dasturdan chaqirilganda uning nomi ko‘rsatiladi, so‘mgra qavs ichida qiymatlar uzatiladi. Funksiyac parametrlar qabul qilmasa, faqat qavslar ko‘rsatiladi. Agar funksiyac qiymat qaytaradigan bo‘lsa, uni o‘zgaruvchiga o‘zlashtirish yoki shunchaki e’tidorga olmaslik mumkin. Parametrlarning tipi va soni chaqiruvdagi parametrlar va tip bilan mos kelishi lozim.
Funksiyalarni chaqirishga misollar ko‘raylik:
print("Message"); // Funksiya xabar chiqaradi
Message print_ok(); // Parametrsiz funksiyani chaqirish
z = sum(10, 20); // "z" ga '30' qiymat o'zlashtiriladi
Uzatilgan qiymatlar mos ravishda funksiya aniqlanishida joylashgan o’zgaruvchilarga o‘zlashtiriladi. sum() funksiyasidan foydalanilganda х o‘zgaruvchiga 10 qiymati, у o‘zgaruvchiga esa 20 qiymati o‘zlashtiriladi. Funksiyaning bajarilishi z o‘zgaruvchiga o‘zlashtiriladi.
Misol tariqasida uchta turli funksiya yaratamiz va ularni chaqiramiz.
#include
// Funksiyalarni e’lon qilish
int sum(int х, int у); // yoki int sum(int, int);
void print(const char *str); // yoki void print(const char *);
void print_ok(); // yoki void print_ok(void);
int main() { // Funksiyalarni chaqirish
print("Message"); // Message
print_ok(); // OK
cout << sum(10, 20) << endl; // 30
cin.get();
return 0;
}
// Funksiyalarning aniqlanishi
int sum(int x, int у) { // Ikkita parametr
return x + у;
}
void print(const char *str) { // Bitta parametr
cout << str << endl;
}
void print_ok() { // Parametrsiz
cout << "OK" << endl;
}

Download 98.33 Kb.

Do'stlaringiz bilan baham:
  1   2   3   4   5




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling