Kurs ishi mavzu: Turlarni almashtirish operatorlari. Toshkent-2023


Download 192.85 Kb.
bet3/8
Sana17.06.2023
Hajmi192.85 Kb.
#1548416
1   2   3   4   5   6   7   8
Bog'liq
Miraxmedov

operator+ funksiyasi "Point" tipi obyektlar qabul qiladi va ikki tomonni qo'shadi, natijada yangi obyekt qaytariladi. Bu funksiya "overloading" operatori yordamida operator "+" ni o'zlashtiradi.
Asosiy funksiya "main"da esa, "p1" va "p2" nomli ikkita "Point" obyekti yaratilgan va ularga qiymatlar berilgan. "p1" va "p2" obyektlari "+" operatori yordamida qo'shiladi va yangi obyekt "p3" ga saqlanadi.

Arifmetik turidagi konversiyalar uchun siz quyma turdagi kastingdan foydalanishingiz mumkin. Satr turini skalar turiga aylantirish uchun Parse usuli va teskari yo'nalishda ToString usulidan foydalanishingiz mumkin. O'rnatilgan bitta bazadan boshqa bazaviy turga o'girishingiz kerak bo'lgan barcha holatlarda, statik usullari konversiyani bajarish uchun maxsus ishlab chiqilgan umumiy sinf bo'lgan tizim nomlari maydoniga o'rnatilgan FCL ning Convert sinfining usullaridan foydalanishingiz mumkin. Convert sinfining boshqa usullari qatorida ob'ektni ma'lum bir turga aylantirishga imkon beradigan ChangeType umumiy statik usulini qayd etaman. Bundan tashqari, DateTime tizim turiga o'tish imkoniyatini ham ta'kidlayman, bu C # tilining asosiy turi bo'lmasa ham, boshqa har qanday tizim turi singari dasturlarda ham ruxsat etiladi. Turli konversiyalarni aniqlash usullaridan tashqari, Convert klassida boshqa usullar mavjud, masalan, Unicode belgilaridan bitta baytli ASCII ga o'tkazish, massivlar bilan bog'liq konversiyalar va boshqa usullar. Tafsilotlarni yordam tizimida topishingiz mumkin. Convert sinfining usullari turlar orasidagi konversiyani amalga oshirishning umumiy usulini qo'llab-quvvatlaydi. Convert sinfi To (ToBoolean (),… ToUInt64 ()) shaklining 15 statik usulini o'z ichiga oladi, bu erda Type 3.1-jadvalda keltirilgan barcha o'rnatilgan turlar uchun Boolean dan UInt64 gacha bo'lishi mumkin. Istisno faqat ob'ekt turi - aniq sabablarga ko'ra ToObject usuli mavjud emas, chunki barcha turdagi ob'ekt turiga yopiq konvertatsiya mavjud. Ushbu 15 usulning har biri haddan tashqari yuklangan va uning x argumenti aytib o'tilgan turlarning har biri bo'lishi mumkin. Haddan tashqari yukni hisobga olgan holda, ushbu sinfning usullaridan foydalangan holda siz biron biridan ikkinchisiga mumkin bo'lgan konversiyalarni bajarishingiz mumkin. Barcha usullar tekshiriladigan konversiyani amalga oshiradi va konversiyani amalga oshirish mumkin bo'lmaganda yoki konversiyani amalga oshirishda aniqlik yo'qolganda istisno qo'yadi. Mana bir misol:


///
/// Convert sinfining sinov usullari
///

ommaviy bekor ConvertTest ()
{string s;
bayt b;
int n;
er-xotin x;
bool bayrog'i;
char sim;
DateTime dt;
sym = '7';
s = Convert.ToString (sim);
x = Convert.ToDouble (lar);
n = Convert.ToInt32 (x);
b = Convert.ToByte (n);
flag = Convert.ToBoolean (b);
x = Convert.ToDouble (bayroq);
s = Convert.ToString (bayroq);
// sym = Convert.ToChar (bayroq);
s = "300";
n = Convert.ToInt32 (s);
// b = Convert.ToByte (lar);
s = "14.09";
// bayroq = Convert.ToBoolean (lar);
// x = Convert.ToDouble (lar);
s = "14.09.2008";
dt = Convert.ToDateTime (lar); }
Ushbu misol turlarning turli xil konversiyalarini namoyish etadi. Ushbu konversiyalarning barchasi xavfli bo'lib, ular Convert sinfining usullari yordamida aniq amalga oshiriladi. Dastlab, belgilar turidagi ma'lumotlar satrga aylantiriladi. Keyin ushbu ma'lumotlar haqiqiy turga aylantiriladi, so'ngra konversiyalar arifmetik tur ichida turni ikki martadan baytgacha kamaytirish bilan amalga oshiriladi. So'nggi konvertatsiya misoli - string ma'lumotlarini DateTime-ga aylantirish. Bir turdan ikkinchisiga xavfli konversiyalar ba'zi ma'lumotlarda muvaffaqiyatli bajarilishi va boshqa ma'lumotlar bilan xatolikka olib kelishi mumkin. Bizning misolimizda ish vaqtidagi xatolarga olib keladigan bayonotlar izohlanadi. Birinchi xato ma'lumotni mantiqiy turdan belgi turiga o'tkazishga urinishda paydo bo'ladi, chunki qiymatni ba'zi bir belgiga (masalan, T) haqiqiy qiymatga aylantiradigan konversiya mavjud emas. Oldingi bayonotlarda xuddi shu ma'lumotlar mag'lubiyatga va arifmetik turlarga muvaffaqiyatli o'tkazilganligiga e'tibor bering. Quyidagi xato, 300 qiymatli mag'lubiyatni bayt yozish uchun o'zgartirishga urinayotganda paydo bo'ladi. Tegishli usul mag'lubiyatga yozilgan qiymat konversiya maqsadini ko'rsatadigan tur uchun juda katta ekanligini tan oladi.Mantiqiy va soxta mantiqiy konstantalardan tashqari boshqa qatorni mantiqiy turga o'tkazishga urinayotganda yana bir xato yuz beradi. Ushbu misoldagi so'nggi xato amalda juda keng tarqalgan. Bu raqamning kasr qismini ajratish uchun vergul o'rniga nuqta noto'g'ri ishlatilganligi bilan bog'liq. Qanday xulosalar qilish kerak? Convert sinfining usullari bilan amalga oshiriladigan xavfli konversiyalar haqiqatan ham xavfli. Shu sababli, ular har doim qo'riqlanadigan blokga joylashtirilishi va mumkin bo'lgan istisnoga qarshi bloklar yaratilishi kerak. Vaziyatni ko'rib chiquvchi ikkita muhim vazifani bajarishi kerak. Ulardan birinchisi informatsion bo'lib, unda yuzaga kelgan xato tavsifi bilan etarlicha batafsil ma'lumot berilishi kerak. Ikkinchi vazifa ham bir xil darajada muhimdir. Dasturchi normal ishlashni davom ettirishi uchun ishlov beruvchi vaziyatni to'g'rilashga harakat qilishi kerak. Bu, masalan, foydalanuvchiga noto'g'ri ko'rsatilgan ma'lumotlarni qayta kiritishga, vaziyatni to'g'irlash uchun qo'shimcha modulni chaqirishga imkon berishi kerak. Har holda, ishni tiklash bo'yicha choralar boshqacha bo'lishi mumkin.Turlarni almashtirish
T(v) ifoda v qiymatni T turga o'tkazadi.
Ba'zi sonli tur o'zgartirishlar:
var i int = 42 var f float64 = float64(i) var u uint = uint(f)
Yoki yanada soddaroq ko'rinishda:i := 42 f := float64(i) u := uint(f)
C dagidan farqli ravishda Go da farqli turlar elementlari orasida biriktirishda aniq turga o'tkazish talab qilinadi. Misoldagi float64 yoki int o'tkazishlarni o'chiring va nima yuz berishini ko'ring.
type-conversions.goSintaksis
package main
import (
"fmt"
"math")
func main() {
var x, y int = 3, 4
var f float64 = math.Sqrt(float64(x*x + y*y))
var z int = int(f)
fmt.Println(x, y, z)}
Arifmetik turidagi konversiyalar uchun siz quyma turdagi kastingdan foydalanishingiz mumkin. Satr turini skalar turiga aylantirish uchun Parse usuli va teskari yo'nalishda ToString usulidan foydalanishingiz mumkin. O'rnatilgan bitta bazadan boshqa bazaviy turga o'girishingiz kerak bo'lgan barcha holatlarda, statik usullari konversiyani bajarish uchun maxsus ishlab chiqilgan umumiy sinf bo'lgan tizim nomlari maydoniga o'rnatilgan FCL ning Convert sinfining usullaridan foydalanishingiz mumkin. Convert sinfining boshqa usullari qatorida ob'ektni ma'lum bir turga aylantirishga imkon beradigan ChangeType umumiy statik usulini qayd etaman. Bundan tashqari, DateTime tizim turiga o'tish imkoniyatini ham ta'kidlayman, bu C # tilining asosiy turi bo'lmasa ham, boshqa har qanday tizim turi singari dasturlarda ham ruxsat etiladi. Turli konversiyalarni aniqlash usullaridan tashqari, Convert klassida boshqa usullar mavjud, masalan, Unicode belgilaridan bitta baytli ASCII ga o'tkazish, massivlar bilan bog'liq konversiyalar va boshqa usullar. Tafsilotlarni yordam tizimida topishingiz mumkin.
Parametrli takrorlash operatori

Yuqorida sanab o`tilgan jarayonlardan biri, takrorlanuvchi jarayonlarni hisoblashni shartli operatorlardan foydalanib ham tashkil etsa bo`ladi, lekin bunday jarayonlarni hisoblashni takrorlash operatorlari yordamida amalga oshirish osonroq kechadi.


Takrorlash operatorlarining 3 xil turi mavjud:



Echilayotgan masalaning mohiyatiga qarab, programma yozuvchi o`zi uchun qulay bo`lgan takrorlash operatorini tanlab olishi mumkin.



Download 192.85 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8




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