JavaRush /مدونة جافا /Random-AR /استراحة القهوة رقم 116. كيفية استخدام المؤشرات الوظيفية ف...

استراحة القهوة رقم 116. كيفية استخدام المؤشرات الوظيفية في جافا. IndexOf in Java - كيفية العثور على فهرس سلسلة في Java

نشرت في المجموعة

كيفية استخدام المؤشرات الوظيفية في جافا

المصدر: مؤشرات Dev.to هي كائنات تخزن عنوان الذاكرة ويمكنها حفظ الذاكرة عن طريق الإشارة مباشرة إلى كائن أو صفيف أو عنوان متغير هدف بدلاً من المرور حسب القيمة. لسوء الحظ، لا يوجد مفهوم "حقيقي" للمؤشرات في جافا. ولكن لحسن الحظ بالنسبة لنا، هناك حل بديل باستخدام مراجع الطريقة القريبة من الشيء الحقيقي. استراحة القهوة رقم 116.  كيفية استخدام المؤشرات الوظيفية في جافا.  فهرس في جافا - كيفية العثور على فهرس سلسلة في جافا - 1

مؤشرات الوظيفة

مؤشر الوظيفة هو مؤشر يشير إلى عنوان الوظيفة. تتضمن بعض حالات الاستخدام إنشاء روتين رد اتصال عن طريق إنشاء وظيفة تستدعي وظيفة أخرى بناءً على تنفيذها، أو تخزين مصفوفة من مؤشرات الوظائف لأساليب تسمى ديناميكيًا (على سبيل المثال، تخزين تعليمات المعالج لمحاكي).

محاكاة مؤشر الوظيفة

هناك أربعة أنواع من مراجع الأسلوب . نحن نستخدم نوعًا يشير إلى طريقة مثيل لكائن معين. لنبدأ بتحديد واجهة تحدد توقيعات الطرق التي تشير إليها.
// 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);
الطريقة المستدعىة 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);

مجموعة من المؤشرات الوظيفية

يمكن محاكاة وظيفة مصفوفة مراجع الأساليب عن طريق إنشاء مصفوفة واجهة مجمعة.
// 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);

مؤشر الوظيفة مقابل الاتصال المباشر

إذا قمت بمقارنة كلا الخيارين، فإن استدعاء الطريقة مباشرة يكون أسرع بخمس مرات تقريبًا من استخدام مرجع الطريقة. كل هذا بسبب الخطوة الإضافية المتمثلة في استدعاء تعبير لامدا مقارنة بالطريقة المخزنة. لكن ربما لن تلاحظ أي خسارة في الأداء خلال عام، لذا لا تقلق بشأن ذلك.

خاتمة

المؤشرات هي متغيرات تشير مباشرة إلى عنوان الكائن بدلاً من القيمة. يشير مؤشر الوظيفة مباشرة إلى عنوان الوظيفة، مما قد يقلل من استهلاك الذاكرة. لا تحتوي Java على مؤشرات، ولكن يمكنها محاكاة السلوك باستخدام مراجع الطرق أو تعبيرات lambda. يعد استخدام مرجع الطريقة أبطأ من استدعاء الطريقة مباشرة، لكن هذا لا يمنع استخدامها.

IndexOf in Java - كيفية العثور على فهرس سلسلة في Java

المصدر: FreeCodeCamp السلسلة عبارة عن مجموعة من الأحرف المحاطة بعلامات اقتباس مزدوجة. تقوم طريقة IndexOf بإرجاع موضع الفهرس للحرف المحدد أو السلسلة الفرعية في السلسلة. في هذه المقالة، سوف نتعرف على بناء جملة أساليب IndexOf المختلفة . سنلقي نظرة أيضًا على الأمثلة التي ستساعدك على فهم البحث عن فهرس الحرف أو السلسلة الفرعية في كود Java واستخدامه بشكل فعال. استراحة القهوة رقم 116.  كيفية استخدام المؤشرات الوظيفية في جافا.  فهرس في جافا - كيفية العثور على فهرس سلسلة في جافا - 2

بناء جملة أسلوب الفهرس

تحتوي طريقة الفهرس على الطرق التالية:
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 => الفهرس 0 e => الفهرس 1 l => الفهرس 2 l => الفهرس 3 0 => الفهرس 4 لاحظ أن الفهرس 5 ليس حرف "W". الفهرس الخامس هو المسافة بين "Hello" و"World". وبالتالي، في هذا الكود، سيتم تجاهل كافة الأحرف الأخرى التي تسبق الفهرس الخامس. يتم إرجاع 7 كمؤشر للحرف الثاني "o".

مثال على طريقة Int IndexOf(String Str).

في المثال التالي، سوف نفهم كيفية عمل الطريقة العامة 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 هو فهرس الحرف "ب".

مثال على طريقة IndexOf(String Str, Int fromIndex).

الطريقة الأخيرة هي public 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 هو فهرس السلسلة الفرعية الثانية لـ. وأخيرًا، عندما نقوم بتمرير حرف أو سلسلة فرعية غير موجودة في السلسلة، فإن طريقة 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