Java-da funktsiya ko'rsatkichlaridan qanday foydalanish kerak
Manba: Dev.to Pointerlar xotira manzilini saqlaydigan ob'ektlar bo'lib, qiymat bo'yicha o'tish o'rniga to'g'ridan-to'g'ri maqsadli ob'ekt, massiv yoki o'zgaruvchi manziliga ishora qilib, xotirani saqlashi mumkin. Afsuski, Java-da ko'rsatgichlarning "haqiqiy" tushunchasi yo'q. Yaxshiyamki, biz uchun haqiqiy narsaga yaqin bo'lgan usul havolalari yordamida vaqtinchalik yechim mavjud.Funktsiya ko'rsatkichlari
Funktsiya ko'rsatkichi - bu funktsiyaning manziliga ishora qiluvchi ko'rsatgich. Ba'zi foydalanish holatlariga uning bajarilishi asosida boshqa funktsiyani chaqiradigan funksiya yaratish yoki dinamik chaqirilgan usullar uchun funktsiya ko'rsatkichlari majmuasini saqlash (masalan, emulyator uchun protsessor ko'rsatmalarini saqlash) orqali qayta qo'ng'iroq qilish tartibini yaratish kiradi.Funktsiya ko'rsatgich simulyatsiyasi
Usul havolalarining to'rt turi mavjud . Biz ma'lum bir ob'ektning namuna usuliga ishora qiluvchi turdan foydalanamiz. Keling, siz ko'rsatgan usullarning imzolarini belgilaydigan interfeysni aniqlashdan boshlaylik.// Wrapping interface
private interface FunctionPointer {
// Method signatures of pointed method
void methodSignature(int a);
}
Keyin maqsadli usulning imzosi bilan usullarni yaratamiz.
public void method1(int b) {
System.out.println("Called method1 with integer " + b);
}
public void method2(int v) {
System.out.println("Called method2 with integer " + v);
}
public void method3(int a) {
System.out.println("Called method3 with integer " + a);
}
Keyingi qadam o'rash interfeysi o'zgaruvchilarini yaratish va ularga usullarni belgilashdir. O'zgaruvchilar saqlanadigan yoki bajariladigan funktsiyaga ko'rsatgich sifatida ishlaydi.
// Create a variable of the interface and assign
// the method references
FunctionPointer pointer1 = this::method1;
FunctionPointer pointer2 = this::method2;
// Call both methods using their "pointer"
pointer1.methodSignature(3);
pointer2.methodSignature(2);
// Reassign and call pointer 1
pointer1 = this::method3;
pointer1.methodSignature(5);
Butun son 3 bilan metod1 chaqiriladi Butun son 2 bilan usul2 deb nomlanadi Butun son 5 bilan usul3 deb ataladi
Lambda ifodalaridan foydalanish
Usul havolalari lambda ifodalari yordamida tayinlanishi mumkin.// Create a method reference and assign a methods using a lambda.
FunctionPointer pointer1 =
(a) -> System.out.println("Called pointer1 with int " + a);
FunctionPointer pointer2 =
(b) -> System.out.println("Called pointer2 with int " + b);
Funktsiya ko'rsatkichlari massivi
Usul havolalari massivining funksionalligini o'rash interfeysi massivini yaratish orqali taqlid qilish mumkin.// Create an array of "pointers"
FunctionPointer[] functionPointersArray = new FunctionPointer[3];
// Assign methods
functionPointersArray[0] = this::method1;
functionPointersArray[1] = this::method2;
functionPointersArray[2] = this::method3;
// Call methods
functionPointersArray[0].methodSignature(3);
functionPointersArray[1].methodSignature(4);
functionPointersArray[2].methodSignature(5);
Funktsiya ko'rsatkichi va to'g'ridan-to'g'ri qo'ng'iroq
Agar ikkala variantni solishtirsangiz, usulni to'g'ridan-to'g'ri chaqirish, usul havolasidan foydalanishdan deyarli 5 baravar tezroq bo'ladi. Bularning barchasi saqlangan usulga nisbatan lambda ifodasini chaqirishning qo'shimcha qadami tufaylidir. Ammo, ehtimol, siz bir yil ichida unumdorlikni yo'qotishni sezmaysiz, shuning uchun bu haqda tashvishlanmang.Xulosa
Ko'rsatkichlar qiymat emas, balki to'g'ridan-to'g'ri ob'ekt manziliga ishora qiluvchi o'zgaruvchilardir. Funktsiya ko'rsatkichi to'g'ridan-to'g'ri funktsiya manziliga ishora qiladi, bu esa xotira sarfini kamaytirishi mumkin. Java-da ko'rsatkichlar yo'q, lekin usul havolalari yoki lambda ifodalari yordamida xatti-harakatlarga taqlid qilishi mumkin. Usul ma'lumotnomasidan foydalanish usulni to'g'ridan-to'g'ri chaqirishdan ko'ra sekinroq, lekin bu uning ishlatilishiga to'sqinlik qilmaydi.Java'da indexOf - Java'da satr indeksini qanday topish mumkin
Manba: FreeCodeCamp Satr qo'sh tirnoq ichiga olingan belgilar to'plamidir. indexOf usuli satrdagi belgilangan belgi yoki pastki qatorning indeks o'rnini qaytaradi. Ushbu maqolada biz turli xil indexOf usullarining sintaksisi haqida bilib olamiz . Shuningdek, biz Java kodidagi belgi yoki pastki qator indeksini qidirishni tushunish va undan samarali foydalanishga yordam beradigan misollarni ko'rib chiqamiz.indexOf usulining sintaksisi
indexOf usuli quyidagi usullarga ega:public int indexOf(int char)
public int indexOf(int char, int fromIndex)
public int indexOf(String str)
public int indexOf(String str, int fromIndex)
Keling, ushbu parametrlarni tushuntiramiz:
- char har bir satrda bitta belgini ifodalaydi.
- fromIndex belgi yoki pastki qator indeksini qidirishni boshlash kerak bo'lgan pozitsiyani belgilaydi. Agar satrda bir xil qiymatga ega bo'lgan ikkita belgi/satr mavjud bo'lsa, bu muhim ahamiyatga ega. Ushbu parametr yordamida siz indexOf usulini qaerdan boshlashni aytishingiz mumkin .
- str satrdagi pastki qatorni ifodalaydi.
Java'da indexOf usulidan qanday foydalanish kerak
Birinchi misolda biz satrdagi bitta belgining indeksini topamiz. Bu bizga public int indexOf(int char) usulini tushunishga yordam beradi .IndexOf(int Char) usuli misoli
public class Main {
public static void main(String[] args) {
String greetings = "Hello World";
System.out.println(greetings.indexOf("o"));
// 4
}
}
Yuqoridagi kodda bizga qaytarilgan "o" belgisining indeksini oldik, bu 4. Bizda ikkita "o" belgisi bor, lekin faqat birinchisining indeksi qaytarildi. Quyidagi misolda biz ikkinchi "o" ning indeksini qanday qaytarishimiz mumkinligini ko'rib chiqamiz. Agar siz ketma-ketlik raqamlari qanday olinishiga qiziqsangiz, satrdagi birinchi belgining indeksi nolga teng ekanligini, ikkinchi belgining indeksi bitta ekanligini va hokazo.
indexOf(int Char, Int fromIndex) usuliga misol
Mana int indexOf(int char, int fromIndex) usulini tushuntiruvchi misol :public class Main {
public static void main(String[] args) {
String greetings = "Hello World";
System.out.println(greetings.indexOf("o", 5));
// 7
}
}
Yuqoridagi misolda biz indexOf usulini beshinchi indeksda ishlay boshlashini aytamiz. H => indeks 0 e => indeks 1 l => indeks 2 l => indeks 3 0 => indeks 4 E'tibor bering, indeks 5 "W" belgisi emas. Beshinchi indeks - "Salom" va "Dunyo" orasidagi bo'shliq. Shunday qilib, ushbu kodda beshinchi indeksdan oldingi barcha boshqa belgilar e'tiborga olinmaydi. 7 ikkinchi "o" belgisining indeksi sifatida qaytariladi.
Int indexOf(String Str) usuliga misol
Quyidagi misolda biz substring indeksini qaytaruvchi public int indexOf(String str) usuli qanday ishlashini tushunamiz.public class Main {
public static void main(String[] args) {
String motivation = "Coding can be difficult but don't give up";
System.out.println(motivation.indexOf("be"));
// 11
}
}
Qiziq, qanday qilib 11 ni qaytarib oldik? Indekslar qanday hisoblanishini va pastki satrlar orasidagi bo'shliqlar qanday indeks deb hisoblanishini tushunish uchun oxirgi qismni ko'rib chiqishingiz kerak. E'tibor bering, pastki qator parametr sifatida uzatilganda, qaytariladigan indeks pastki qatordagi birinchi belgi indeksidir. 11 - "b" belgisining indeksi.
indexOf(String Str, Int fromIndex) usuliga misol
Oxirgi usul - public int indexOf(String str, int fromIndex) - public int indexOf(int char, int fromIndex) usuli bilan bir xil . Belgilangan joydan indeksni qaytaradi.public class Main {
public static void main(String[] args) {
String motivation = "The for loop is used for the following";
System.out.println(motivation.indexOf("for", 5));
// 21
}
}
Ushbu misolda biz usul o'z ishini birinchi pastki qatordan keyin keladigan beshinchi indeksdan boshlashi kerakligini ko'rsatdik. 21 - for ning ikkinchi pastki qatori indeksi. Nihoyat, satrda bo'lmagan belgi yoki pastki qatorni o'tkazganimizda, indexOf usuli -1ni qaytaradi. Mana bir misol:
public class Main {
public static void main(String[] args) {
String motivation = "The for loop is used for the following";
System.out.println(motivation.indexOf("code"));
// -1
}
}
GO TO FULL VERSION