JavaRush /Java блогы /Random-KK /Кофе-брейк №116. Java тілінде функционалдық көрсеткіштерд...

Кофе-брейк №116. Java тілінде функционалдық көрсеткіштерді қалай пайдалануға болады. Java-дағы indexOf - Java-да жолдың индексін қалай табуға болады

Топта жарияланған

Java тілінде функционалдық көрсеткіштерді қалай пайдалануға болады

Source: Dev.to Көрсеткіштер жад мекенжайын сақтайтын нысандар және мән бойынша өтудің орнына мақсатты нысанға, массивке немесе айнымалы мекенжайға тікелей нұсқау арқылы жадты сақтай алады. Өкінішке орай, Java тілінде көрсеткіштердің «нақты» тұжырымдамасы жоқ. Бірақ бақытымызға орай, нақты нәрсеге жақын әдіс сілтемелерін пайдалану арқылы уақытша шешім бар. Кофе-брейк №116.  Java тілінде функционалдық көрсеткіштерді қалай пайдалануға болады.  Java-дағы indexOf - Java-да жолдың индексін қалай табуға болады - 1

Функция көрсеткіштері

Функция көрсеткіші – функцияның addressін көрсететін көрсеткіш. Кейбір пайдалану жағдайлары оның орындалуы негізінде басқа функцияны шақыратын функцияны жасау немесе динамикалық түрде шақырылатын әдістер үшін функция көрсеткіштерінің жиымын сақтау (мысалы, эмулятор үшін процессор нұсқауларын сақтау) арқылы кері шақыру тәртібін жасауды қамтиды.

Функция көрсеткішін модельдеу

Әдістерге сілтемелердің төрт түрі бар . Біз белгілі бір нысанның даналық әдісіне сілтеме жасайтын типті қолданамыз. Сіз көрсеткен әдістердің қолтаңбаларын анықтайтын интерфейсті анықтаудан бастайық.
// Wrapping interface
private interface FunctionPointer {
  // Method signatures of pointed method
  void methodSignature(int a);
}
Содан кейін біз мақсатты әдістің қолтаңбасы бар әдістерді жасаймыз.
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);
}
Келесі қадам орауыш интерфейсінің айнымалы мәндерін жасау және оларға әдістерді тағайындау болып табылады. Айнымалылар сақталатын немесе орындалатын функцияға көрсеткіш ретінде әрекет етеді.
// 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 бүтін саны бар әдіс1 шақырылады 2 бүтін саны бар әдіс2 шақырылады 5 бүтін саны бар әдіс3 шақырылады

Ламбда өрнектерін пайдалану

Әдіс сілтемелерін лямбда өрнектері арқылы тағайындауға болады.
// 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);

Функция көрсеткіштерінің массиві

Әдіс сілтемелерінің жиымының функционалдығын орауыш интерфейс массивін жасау арқылы эмуляциялауға болады.
// 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);

Функция көрсеткіші және тікелей шақыру

Екі опцияны салыстырсаңыз, әдісті тікелей шақыру әдіс сілтемесін пайдаланудан 5 есе жылдамырақ болады. Мұның бәрі сақталған әдіспен салыстырғанда лямбда өрнегін шақырудың қосымша қадамына байланысты. Бірақ сіз бір жыл ішінде өнімділіктің төмендеуін байқамайсыз, сондықтан бұл туралы алаңдамаңыз.

Қорытынды

Көрсеткіштер – мәнге емес, тікелей нысанның мекенжайына нұсқайтын айнымалылар. Функция көрсеткіші жадты тұтынуды азайтуы мүмкін функция мекенжайын тікелей көрсетеді. Java-да көрсеткіштер жоқ, бірақ әдіс сілтемелері немесе лямбда өрнектері арқылы мінез-құлықты эмуляциялай алады. Әдіс сілтемесін пайдалану әдісті тікелей шақырудан баяуырақ, бірақ бұл оның қолданылуына кедергі жасамайды.

Java-дағы indexOf - Java-да жолдың индексін қалай табуға болады

Дереккөз: FreeCodeCamp Жол – қос тырнақшаға алынған таңбалар жиыны. indexOf әдісі жолдағы көрсетілген таңбаның немесе ішкі жолдың индекс орнын қайтарады. Бұл мақалада біз әртүрлі indexOf әдістерінің синтаксисі туралы білеміз . Біз сондай-ақ Java codeындағы таңба немесе ішкі жолдың индексін іздеуді түсінуге және тиімді пайдалануға көмектесетін мысалдарды қарастырамыз. Кофе-брейк №116.  Java тілінде функционалдық көрсеткіштерді қалай пайдалануға болады.  Java-дағы indexOf - Java-да жолдың индексін қалай табуға болады - 2

indexOf әдісінің синтаксисі

indexOf әдісінде келесі әдістер бар:
public int indexOf(int char)
public int indexOf(int char, int fromIndex)
public int indexOf(String str)
public int indexOf(String str, int fromIndex)
Осы параметрлерді түсіндірейік:
  • char әр жолға бір таңбаны білдіреді.
  • fromIndex таңба немесе ішкі жолдың индексін іздеу басталатын орынды көрсетеді. Бұл жолда бірдей мәнге ие екі таңба/жол болған кезде маңызды. Бұл параметр арқылы indexOf әдісіне қай жерден бастау керектігін айта аласыз .
  • str жолдағы ішкі жолды білдіреді.
Мұның бәрі қалай жұмыс істейтінін әлі түсінбесеңіз, алаңдамаңыз - мысалдар бәрін түсіндіреді!

Java-де indexOf әдісін қалай пайдалануға болады

Бірінші мысалда жолдағы бір таңбаның индексін табамыз. Бұл бізге public int indexOf(int char) әдісін түсінуге көмектеседі .

IndexOf(int Char) әдісінің мысалы

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

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

    // 4
  }
}
Жоғарыдағы codeта бізге қайтарылған «o» таңбасының индексін алдық, ол 4. Бізде «o» екі таңбасы бар, бірақ тек біріншісінің индексі ғана қайтарылды. Келесі мысалда біз екінші «o» индексін қалай қайтаруға болатынын көреміз. Егер сіз реттік сандар қалай шығарылатыны туралы сұрақ туындаса, жолдағы бірінші таңбаның индексі нөлге тең, екінші таңбаның индексі бір және т.б. екенін байқайсыз.

indexOf(int Char, Int fromIndex) әдісінің мысалы

Мұнда int indexOf(int char, int fromIndex) әдісін түсіндіретін мысал берілген :
public class Main {
  public static void main(String[] args) {
    String greetings = "Hello World";

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

    // 7
  }
}
Жоғарыдағы мысалда біз indexOf әдісіне бесінші индексте жұмыс істеуді бастаймыз. H => индекс 0 e => индекс 1 l => индекс 2 l => индекс 3 0 => индекс 4 5 индексі “W” таңбасы емес екенін ескеріңіз. Бесінші көрсеткіш – «Сәлем» және «Әлем» арасындағы бос орын. Осылайша, бұл codeта бесінші индекстің алдындағы барлық басқа таңбалар еленбейді. 7 екінші «o» таңбасының индексі ретінде қайтарылады.

Int indexOf(String Str) әдісінің мысалы

Келесі мысалда ішкі жолдың индексін қайтаратын public int indexOf(String str) әдісі қалай жұмыс істейтінін түсінеміз .
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-ді қалай қайтардық? Индекстер қалай есептелетінін және ішкі жолдар арасындағы бос орындар да индекстер ретінде қалай қарастырылатынын түсіну үшін соңғы бөлімді қарап шығу керек. Ішкі жол параметр ретінде берілгенде, қайтарылатын индекс ішкі жолдағы бірінші таңбаның индексі екенін ескеріңіз. 11 – «b» таңбасының көрсеткіші.

indexOf(String Str, Int fromIndex) әдісінің мысалы

Соңғы әдіс public int indexOf(String str, int fromIndex) – public int indexOf(int char, int fromIndex) әдісімен бірдей . Ол көрсетілген позициядан индексті қайтарады.
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
  }
}
Бұл мысалда әдіс өз жұмысын for бірінші ішкі жолдан кейін келетін бесінші индекстен бастау керек екенін көрсеттік. 21 - for екінші ішкі жолының индексі. Соңында, жолда жоқ таңбаны немесе ішкі жолды бергенде, indexOf әдісі -1 қайтарады. Міне, мысал:
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
  }
}

Қорытынды

Бұл мақалада біз анық мысалдармен төрт indexOf әдісін қалай пайдалану керектігін білдік. Сондай-ақ біз осы әдістердің әрқайсысының синтаксисі қандай болатынын және олар индексті қайтаруды қалай көрсететінін көрдік. Бұған қоса, біз жоқ таңба немесе ішкі жол параметр ретінде берілгенде не болатынын біле алдық.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION