JavaRush /Java Blog /Random-TK /Kofe arakesmesi # 116 Java-da funksiýa görkezijilerini nä...

Kofe arakesmesi # 116 Java-da funksiýa görkezijilerini nädip ulanmaly. JavaOx-da indexOf - Java-da setiriň indeksini nädip tapmaly

Toparda çap edildi

Java-da funksiýa görkezijilerini nädip ulanmaly

Çeşme: Dev.to Pointers - ýat salgysyny saklaýan we bahadan geçmegiň ýerine gönüden-göni maksat obýektine, massiwine ýa-da üýtgeýän adrese yşarat edip ýady ýatda saklap bilýän obýektlerdir. Gynansagam, Java-da görkezijiler barada “hakyky” düşünje ýok. Emma, ​​bagtymyza, hakyky zada ýakyn bolan usul salgylanmalaryny ulanyp, bir çözgüt bar. Kofe arakesmesi # 116  Java-da funksiýa görkezijilerini nädip ulanmaly.  JavaOx-da indexOf - Java-da setiriň indeksini nädip tapmaly - 1

Funksiýa görkezijileri

Funksiýa görkezijisi, funksiýanyň salgysyny görkezýän görkeziji. Käbir ulanylyş ýagdaýlary, ýerine ýetirilişine esaslanýan başga bir funksiýa çagyrýan bir funksiýa döretmek ýa-da dinamiki diýilýän usullar üçin köp sanly funksiýa görkezijisini saklamak arkaly yzyna çagyryş düzgünini döretmegi öz içine alýar (mysal üçin, emulýator üçin prosessor görkezmelerini saklamak).

Funksiýa görkezijisiniň simulýasiýasy

Usul salgylanmalarynyň dört görnüşi bar . Belli bir obýektiň mysal usulyna degişli görnüşi ulanýarys. Geliň, görkezýän usullaryňyzyň gollaryny kesgitleýän interfeýsi kesgitlemekden başlalyň.
// Wrapping interface
private interface FunctionPointer {
  // Method signatures of pointed method
  void methodSignature(int a);
}
Soňra maksatly usulyň goly bilen usullary dörederis.
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);
}
Indiki ädim, örtük interfeýs üýtgeýjilerini döretmek we olara usullary bellemek. Üýtgeýjiler saklanjak ýa-da ýerine ýetirilmeli funksiýa görkeziji hökmünde çykyş eder.
// 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-nji bitewi bilen 1-nji usul diýilýär

Lambda aňlatmalaryny ulanmak

Usul salgylanmalaryny lambda aňlatmalary ulanyp belläp bolýar.
// 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);

Funksiýa görkezijileriniň hatary

Usul salgylanmalarynyň toplumynyň işleýşini, interfeýs massiwini döretmek arkaly öýkünip bolýar.
// 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);

Funksiýa görkezijisi vs göni jaň

Iki warianty deňeşdirseňiz, usuly göni çagyrmak, usul salgylanmasyny ulanmakdan 5 esse çaltdyr. Bularyň hemmesi, saklanylýan usul bilen deňeşdirilende lambda aňlatmasyny çagyrmagyň goşmaça ädimi sebäpli. Probablyöne bir ýyldan öndürijilik ýitgisini duýmarsyňyz, şonuň üçin alada etme.

Netije

Görkezijiler baha däl-de, obýektiň salgysyna gönüden-göni görkezýän üýtgeýjilerdir. Funksiýa görkezijisi ýadyň sarp edilişini azaldyp bilýän funksiýa salgysyna gönüden-göni görkezýär. Java-da görkezijiler ýok, ýöne usul salgylanmalaryny ýa-da lambda aňlatmalaryny ulanyp, özüni alyp barşyny öýkünip bilýär. Usul salgylanmasyny ulanmak usuly gönüden-göni çagyrmakdan has haýal, ýöne bu onuň ulanylmagyna päsgel bermeýär.

JavaOx-da indexOf - Java-da setiriň indeksini nädip tapmaly

Çeşme: FreeCodeCamp Bir setir goşa dyrnakda ýerleşdirilen nyşanlaryň toplumydyr. “IndexOf” usuly görkezilen simwolyň ýa-da setirdäki aşaky görkezijini görkezýär. Bu makalada dürli indexOf usullarynyň sintaksisini öwreneris . Şeýle hem, bir nyşan indeksini ýa-da Java kodundaky substringi gözlemäge düşünmäge we netijeli ulanmaga kömek etjek mysallara serederis. Kofe arakesmesi # 116  Java-da funksiýa görkezijilerini nädip ulanmaly.  JavaOx-da indexOf - Java-da setiriň indeksini nädip tapmaly - 2

IndexOf usulynyň sintaksis

IndexOf usulynyň aşakdaky usullary bar:
public int indexOf(int char)
public int indexOf(int char, int fromIndex)
public int indexOf(String str)
public int indexOf(String str, int fromIndex)
Geliň, bu parametrleri düşündireliň:
  • char her setirde bir nyşan görkezýär.
  • fromIndex, nyşanlaryň ýa-da aşaky görkezijileriň gözleginiň başlamaly ýerini kesgitleýär. Bir setirde deň bahasy bolan iki simwol / setir bar bolsa bu möhümdir. Bu parametr bilen, nireden başlamalydygyny indexOf usulyna aýdyp bilersiňiz .
  • str setirdäki aşaky bölegi aňladýar.
Bularyň hemmesiniň nähili işleýändigine düşünmeseňiz gorkmaň - mysallar hemme zady açyk görkezer!

Java-da indexOf usulyny nädip ulanmaly

Ilkinji mysalda bir simwolyň görkezijisini setirde taparys. Bu , köpçülige açyk int indexOf (int char) usulyna düşünmäge kömek eder .

IndexOf (int Char) usulynyň mysaly

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

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

    // 4
  }
}
Aboveokardaky kodda, “o” harpynyň indeksini aldyk, bu bolsa 4-e deňdir. Iki sany “o” harpymyz bar, ýöne diňe birinjisiniň görkezijisi yzyna gaýtaryldy. Aşakdaky mysalda ikinji "o" indeksini nädip yzyna gaýtaryp boljakdygyny göreris. Yzygiderlilik sanlarynyň nädip alynýandygy bilen gyzyklanýan bolsaňyz, setirdäki birinji harpyň nol görkezijisine, ikinji simwolyň bir görkezijisine we ş.m.

IndexOf (int Char, Int fromIndex) usulynyň mysaly

Ine , int indexOf (int char, int fromIndex) usulyny düşündirýän mysal :
public class Main {
  public static void main(String[] args) {
    String greetings = "Hello World";

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

    // 7
  }
}
Aboveokardaky mysalda, indexOf usulyna bäşinji indeksde işe başlamagy aýdýarys. H => indeks 0 e => indeks 1 l => indeks 2 l => indeks 3 0 => indeks 4 5 indeksiň “W” nyşan däldigine üns beriň. Bäşinji görkeziji “Salam” bilen “Dünýä” arasyndaky boşluk. Şeýlelik bilen, bu kodda bäşinji indeksden öňki beýleki nyşanlaryň hemmesi hasaba alynmaz. 7 “o” ikinji belginiň görkezijisi hökmünde yzyna gaýtarylýar.

Int indexOf (String Str) usulynyň mysaly

Aşakdaky mysalda, substringiň indeksini yzyna gaýtarýan köpçülikleýin int indexOf (String str) usulynyň nähili işleýändigine düşüneris .
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
  }
}
11-ni nädip yzyna aldyk? Indeksleriň nädip sanalýandygyna we aşaky bölekleriň arasyndaky boşluklaryň hem indeks hasaplanýandygyna düşünmek üçin soňky bölümi gözden geçirmeli. Substring parametr hökmünde geçende, yzyna gaýtarylan indeks substringdäki birinji harpyň görkezijisidir. 11 “b” harpynyň görkezijisidir.

IndexOf (String Str, Int fromIndex) usulynyň mysaly

Iň soňky usul köpçülikleýin int indexOf (String str, int fromIndex) - köpçülikleýin int indexOf (int char, int fromIndex) usuly bilen deňdir . Indeks görkezilen ýagdaýdan gaýtarylýar.
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 mysalda, usulyň öz işine birinji substratdan soň gelýän bäşinji indeksde başlamalydygyny kesgitledik. 21 üçin ikinji aşaky görkezijiniň görkezijisidir. Ahyrynda, setirde bolmadyk bir nyşan ýa-da aşaky ýazgydan geçenimizde, indexOf usuly -1 gaýdyp geler. Ine bir mysal:
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
  }
}

Netije

Bu makalada aýdyň mysallar bilen dört indexOf usulyny nähili ulanmalydygyny öwrendik. Şeýle hem, bu usullaryň her biri üçin sintaksisiň nähili bolýandygyny we indeksiň gaýdyp gelmegini nädip aýdýandyklaryny gördük. Mundan başga-da, ýok bir nyşan ýa-da substring parametr hökmünde geçende näme bolýandygyny anyklap bildik.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION