JavaRush /وبلاگ جاوا /Random-FA /کافه استراحت شماره 116. نحوه استفاده از نشانگرهای تابع در...

کافه استراحت شماره 116. نحوه استفاده از نشانگرهای تابع در جاوا indexOf در جاوا - نحوه پیدا کردن نمایه یک رشته در جاوا

در گروه منتشر شد

نحوه استفاده از نشانگرهای تابع در جاوا

منبع: Dev.to Pointers اشیایی هستند که یک آدرس حافظه را ذخیره می کنند و می توانند با اشاره مستقیم به یک شی هدف، آرایه یا آدرس متغیر به جای عبور از مقدار، حافظه را ذخیره کنند. متأسفانه، هیچ مفهوم "واقعی" از اشاره گرها در جاوا وجود ندارد. اما خوشبختانه برای ما، راه‌حلی با استفاده از مراجع روش وجود دارد که به واقعیت نزدیک است. کافه استراحت شماره 116.  نحوه استفاده از نشانگرهای تابع در جاوا  indexOf در جاوا - نحوه پیدا کردن نمایه یک رشته در جاوا - 1

نشانگرهای تابع

اشاره گر تابع اشاره گر است که به آدرس یک تابع اشاره می کند. برخی از موارد استفاده شامل ایجاد یک روال برگشت تماس با ایجاد تابعی است که تابع دیگری را بر اساس اجرای آن فراخوانی می کند، یا ذخیره آرایه ای از نشانگرهای تابع برای متدهایی که به صورت پویا نامیده می شوند (به عنوان مثال، ذخیره دستورالعمل های پردازنده برای یک شبیه ساز).

شبیه سازی نشانگر تابع

چهار نوع مرجع روش وجود دارد . ما از نوعی استفاده می کنیم که به یک روش نمونه از یک شی خاص اشاره دارد. بیایید با تعریف یک رابط شروع کنیم که امضای متدهایی را که به آنها اشاره می کنید تعریف می کند.
// Wrapping interface
private interface FunctionPointer {
  // Method signatures of pointed method
  void methodSignature(int a);
}
سپس متدهایی با امضای متد target ایجاد می کنیم.
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);
}
مرحله بعدی ایجاد متغیرهای واسط wrapper و اختصاص متدها به آنها است. متغیرها به عنوان یک اشاره گر به تابع ذخیره یا اجرا می شوند.
// 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);
متد1 با عدد صحیح 3 فراخوانی شده متد2 با عدد صحیح 2 فراخوانی شده متد3 با عدد صحیح 5

استفاده از عبارات لامبدا

مراجع روش را می توان با استفاده از عبارات لامبدا اختصاص داد.
// 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);

آرایه ای از نشانگرهای تابع

عملکرد آرایه ای از مراجع متد را می توان با ایجاد یک آرایه واسط wrapper تقلید کرد.
// 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 برابر سریعتر از استفاده از مرجع متد است. این همه به دلیل مرحله اضافی فراخوانی یک عبارت لامبدا در مقایسه با یک روش ذخیره شده است. اما احتمالاً در طول یک سال متوجه کاهش عملکرد نخواهید شد، پس نگران آن نباشید.

نتیجه

اشاره گرها متغیرهایی هستند که به جای یک مقدار، مستقیماً به آدرس یک شی اشاره می کنند. نشانگر تابع مستقیماً به آدرس تابع اشاره می کند که می تواند مصرف حافظه را کاهش دهد. جاوا نشانگر ندارد، اما می تواند رفتار را با استفاده از مراجع متد یا عبارات لامبدا شبیه سازی کند. استفاده از مرجع متد کندتر از فراخوانی مستقیم یک متد است، اما این مانع استفاده از آن نمی شود.

indexOf در جاوا - نحوه پیدا کردن نمایه یک رشته در جاوا

منبع: FreeCodeCamp یک رشته مجموعه ای از کاراکترها است که در دو گیومه محصور شده اند. متد indexOf موقعیت شاخص کاراکتر یا زیررشته مشخص شده را در یک رشته برمی گرداند. در این مقاله با نحو روش های مختلف indexOf آشنا می شویم . ما همچنین به نمونه هایی نگاه خواهیم کرد که به شما در درک و استفاده مؤثر از جستجوی فهرست یک کاراکتر یا زیر رشته در کد جاوا کمک می کند. کافه استراحت شماره 116.  نحوه استفاده از نشانگرهای تابع در جاوا  indexOf در جاوا - نحوه پیدا کردن شاخص یک رشته در جاوا - 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 نشان دهنده یک زیر رشته در یک رشته است.
نگران نباشید اگر هنوز متوجه نشده اید که چگونه همه چیز کار می کند - مثال ها همه چیز را روشن می کنند!

نحوه استفاده از متد indexOf در جاوا

در مثال اول، شاخص یک کاراکتر در یک رشته را پیدا خواهیم کرد. این به ما کمک می کند تا روش عمومی 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
  }
}
در کد بالا، ایندکس کاراکتر "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 => index 0 e => index 1 l => index 2 l => index 3 0 => index 4 توجه داشته باشید که شاخص 5 یک کاراکتر "W" نیست. پنجمین شاخص فاصله بین «سلام» و «جهان» است. بنابراین، در این کد، سایر کاراکترهای قبل از ایندکس پنجم نادیده گرفته خواهند شد. 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).

آخرین روش عمومی int indexOf (string str، int fromIndex) است - همان روش عمومی 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
  }
}
در این مثال، ما مشخص کردیم که متد باید کار خود را از پنجمین شاخص که بعد از اولین زیر رشته برای می آید، شروع کند. 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