JavaRush /Java Blogu /Random-AZ /Kofe fasiləsi №116. Java-da funksiya göstəricilərindən ne...

Kofe fasiləsi №116. Java-da funksiya göstəricilərindən necə istifadə etmək olar. Java-da indexOf - Java-da sətirin indeksini necə tapmaq olar

Qrupda dərc edilmişdir

Java-da funksiya göstəricilərindən necə istifadə etmək olar

Mənbə: Dev.to Göstəriciləri yaddaş ünvanını saxlayan obyektlərdir və dəyərlə ötürmək əvəzinə hədəf obyektinə, massivinə və ya dəyişən ünvanına birbaşa işarə edərək yaddaşa qənaət edə bilirlər. Təəssüf ki, Java-da “real” göstəricilər anlayışı yoxdur. Ancaq xoşbəxtlikdən bizim üçün, real şeyə yaxın olan metod istinadlarından istifadə edərək müvəqqəti həll yolu var. Kofe fasiləsi №116.  Java-da funksiya göstəricilərindən necə istifadə etmək olar.  Java-da indexOf - Java-da sətirin indeksini necə tapmaq olar - 1

Funksiya göstəriciləri

Funksiya göstəricisi funksiyanın ünvanını göstərən göstəricidir. Bəzi istifadə hallarına onun icrasına əsasən başqa funksiyanı çağıran funksiya yaratmaqla geri çağırış rejimi yaratmaq və ya dinamik olaraq çağırılan metodlar üçün funksiya göstəriciləri massivinin saxlanması (məsələn, emulyator üçün prosessor təlimatlarının saxlanması) daxildir.

Funksiya göstərici simulyasiyası

Dörd növ metod istinadı var . Biz konkret obyektin nümunə metoduna istinad edən tipdən istifadə edirik. İşarə etdiyiniz metodların imzalarını təyin edən interfeysi təyin etməklə başlayaq.
// Wrapping interface
private interface FunctionPointer {
  // Method signatures of pointed method
  void methodSignature(int a);
}
Sonra hədəf metodun imzası ilə üsullar yaradacağıq.
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);
}
Növbəti addım sarğı interfeysi dəyişənləri yaratmaq və onlara metodlar təyin etməkdir. Dəyişənlər saxlanacaq və ya yerinə yetiriləcək funksiyaya göstərici kimi çıxış edəcək.
// 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);
3 tam ədədi ilə metod1 çağırılır 2 tam ədədi ilə metod2 çağırılır 5 tam ədədi ilə metod3 çağırılır

Lambda ifadələrindən istifadə

Metod istinadları lambda ifadələrindən istifadə etməklə təyin edilə bilər.
// 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);

Funksiya göstəriciləri massivi

Metod istinadları massivinin funksionallığı sarğı interfeysi massivi yaratmaqla təqlid edilə bilər.
// 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);

Funksiya göstəricisi və birbaşa zəng

Hər iki variantı müqayisə etsəniz, metodu birbaşa çağırmaq metod istinadından istifadə etməkdən demək olar ki, 5 dəfə sürətlidir. Bütün bunlar, saxlanılan metodla müqayisədə lambda ifadəsini çağırmaq üçün əlavə addımdır. Ancaq yəqin ki, bir il ərzində heç bir performans itkisi hiss etməyəcəksiniz, buna görə narahat olmayın.

Nəticə

Göstəricilər dəyərdən çox obyektin ünvanına birbaşa işarə edən dəyişənlərdir. Funksiya göstəricisi bilavasitə funksiyanın ünvanına işarə edir ki, bu da yaddaş istehlakını azalda bilər. Java-da göstəricilər yoxdur, lakin metod istinadları və ya lambda ifadələrindən istifadə edərək davranışı təqlid edə bilər. Metod istinadından istifadə metodu birbaşa çağırmaqdan daha yavaşdır, lakin bu, onun istifadəsinə mane olmur.

Java-da indexOf - Java-da sətirin indeksini necə tapmaq olar

Mənbə: FreeCodeCamp Sətir qoşa dırnaq içərisində olan simvollar toplusudur. indexOf metodu sətirdə göstərilən simvolun və ya alt sətirin indeks mövqeyini qaytarır. Bu yazıda biz müxtəlif indexOf metodlarının sintaksisini öyrənəcəyik . Biz həmçinin Java kodunda simvol və ya alt sətir indeksinin axtarışını başa düşməyinizə və səmərəli istifadə etməyə kömək edəcək nümunələrə baxacağıq. Kofe fasiləsi №116.  Java-da funksiya göstəricilərindən necə istifadə etmək olar.  Java-da indexOf - Java-da sətirin indeksini necə tapmaq olar - 2

indexOf metodunun sintaksisi

indexOf metodu aşağıdakı üsullara malikdir:
public int indexOf(int char)
public int indexOf(int char, int fromIndex)
public int indexOf(String str)
public int indexOf(String str, int fromIndex)
Bu parametrləri izah edək:
  • char hər sətirdə bir simvolu təmsil edir.
  • fromIndex simvol və ya alt sətirin indeksinin axtarışının başlamalı olduğu mövqeyi müəyyənləşdirir. Sətirdə eyni dəyərə malik iki simvol/sətir olduqda bu vacibdir. Bu parametrlə siz indexOf metoduna haradan başlamaq lazım olduğunu deyə bilərsiniz.
  • str sətirdəki alt sətri təmsil edir.
Bütün bunların necə işlədiyini hələ başa düşmürsənsə, narahat olmayın - nümunələr hər şeyi aydınlaşdıracaq!

Java-da indexOf metodundan necə istifadə etmək olar

Birinci misalda sətirdə bir simvolun indeksini tapacağıq. Bu, bizə public int indexOf(int char) metodunu anlamağa kömək edəcək .

IndexOf(int Char) metodu nümunəsi

public class Main {
  public static void main(String[] args) {
    String greetings = "Hello World";

    System.out.println(greetings.indexOf("o"));

    // 4
  }
}
Yuxarıdakı kodda bizə qaytarılan “o” simvolunun indeksini əldə etdik, bu 4-dür. Bizdə iki “o” simvolu var, ancaq birincinin indeksi qaytarıldı. Aşağıdakı nümunədə ikinci "o" indeksini necə qaytara biləcəyimizi görəcəyik. Ardıcıllıq nömrələrinin necə əldə edildiyi ilə maraqlanırsınızsa, sətirdəki birinci simvolun indeksi sıfır, ikinci simvolun indeksi bir və s.

indexOf(int Char, Int fromIndex) metodunun nümunəsi

Budur int indexOf(int char, int fromIndex) metodunu izah edən bir nümunə :
public class Main {
  public static void main(String[] args) {
    String greetings = "Hello World";

    System.out.println(greetings.indexOf("o", 5));

    // 7
  }
}
Yuxarıdakı misalda biz indexOf metoduna deyirik ki, beşinci indeksdə işə başlasın. H => indeks 0 e => indeks 1 l => indeks 2 l => indeks 3 0 => indeks 4 Qeyd edək ki, indeks 5 “W” simvolu deyil. Beşinci indeks "Salam" və "Dünya" arasındakı boşluqdur. Beləliklə, bu kodda beşinci indeksdən əvvəlki bütün digər simvollar nəzərə alınmayacaq. 7 ikinci “o” simvolunun indeksi kimi qaytarılır.

Int indexOf(String Str) metodunun nümunəsi

Aşağıdakı nümunədə alt sətirin indeksini qaytaran public int indexOf(String str) metodunun necə işlədiyini anlayacağıq .
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
  }
}
Maraqlıdır, biz 11-i necə geri qaytardıq? İndekslərin necə hesablandığını və alt sətirlər arasındakı boşluqların da indeks hesab edildiyini başa düşmək üçün sonuncu bölməni nəzərdən keçirməlisiniz. Qeyd edək ki, alt sətir parametr kimi ötürüldükdə qaytarılan indeks alt sətirdəki birinci simvolun indeksidir. 11 “b” simvolunun indeksidir.

indexOf(String Str, Int fromIndex) metodunun nümunəsi

Sonuncu üsul public int indexOf(String str, int fromIndex) - public int indexOf(int char, int fromIndex) metodu ilə eynidir . Göstərilən mövqedən indeksi qaytarır.
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
  }
}
Bu misalda metodun işinə ilk alt sətirdən sonra gələn beşinci indeksdən başlamalı olduğunu qeyd etdik. 21 for-un ikinci alt sətirinin indeksidir. Nəhayət, sətirdə olmayan simvolu və ya alt sətri ötürdükdə indexOf metodu -1 qaytaracaq. Budur bir nümunə:
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
  }
}

Nəticə

Bu yazıda biz aydın nümunələrlə dörd indexOf metodundan necə istifadə edəcəyimizi öyrəndik. Bu metodların hər biri üçün sintaksisin nəyə bənzədiyini və indeksə necə qayıtmağı əmr etdiklərini də gördük. Bundan əlavə, mövcud olmayan simvol və ya alt sətir parametr kimi ötürüldükdə nə baş verdiyini öyrənə bildik.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION