CodeGym /جاوا بلاگ /Random-UR /مثالوں کے ساتھ جاوا پیش گوئی
John Squirrels
سطح
San Francisco

مثالوں کے ساتھ جاوا پیش گوئی

گروپ میں شائع ہوا۔
عام طور پر پیشین گوئی کا مطلب ایک بیان ہے جو اس بات کا تعین کرتا ہے کہ آیا کوئی قدر صحیح یا غلط ہو سکتی ہے۔ پروگرامنگ میں پیشین گوئی کا مطلب ایک دلیل کے ساتھ فنکشن ہوتا ہے جو بولین ویلیو لوٹاتا ہے۔ فنکشنل انٹرفیس پریڈیکیٹ جاوا 8 میں محسوس کیا گیا تھا۔ "فنکشنل" کا مطلب ہے کہ اس میں صرف ایک خلاصہ طریقہ ہے۔ یہ ایک دلیل کو قبول کرتا ہے اور بولین لوٹاتا ہے۔ جاوا میں، فنکشنل انٹرفیس لیمبڈا ایکسپریشنز، کنسٹرکٹرز اور میتھڈ ریفرینس کو سنبھالنے کے لیے استعمال کیے جاتے ہیں۔ عام طور پر جاوا 8 پریڈیکیٹ اشیاء کے مجموعے کے لیے فلٹر لگانے کے لیے استعمال ہوتا ہے۔ آئیے اس کی اہم ایپلی کیشنز اور وسیع پیمانے پر استعمال ہونے والے طریقوں پر ایک نظر ڈالتے ہیں، اور ساتھ ہی کچھ پریکٹس کے مسائل بھی حل کرتے ہیں۔ مثال کے ساتھ جاوا پیش گوئی - 1

ڈویلپرز Predicate کیوں استعمال کرتے ہیں۔

بنیادی طور پر، ڈویلپر کسی بھی کام کے لیے پیشین گوئی کا استعمال کر سکتے ہیں جس میں پہلے سے طے شدہ معیار کی بنیاد پر آئٹمز کا جائزہ لینا اور بولین ویلیو واپس کرنا شامل ہے۔ یہاں سادہ کاموں کی مثالیں ہیں جو ڈویلپر پیش گوئی کا استعمال کرتے ہوئے سنبھالتے ہیں:
  • عدد کے سیٹ کو فلٹر کرنا۔
  • اس بات کو یقینی بنا کر فہرستوں کو چھانٹنا کہ ڈیٹا کئی پہلے سے طے شدہ شرائط کے مطابق ہے (مثلاً قیمت اور وزن کی شرائط طے کرکے اشیاء کی ایک رینج کو ترتیب دینا)۔
  • کنکرنٹ پروگرامنگ میں یوٹیلیٹی پیکجز کا استعمال۔
پیش گوئیاں سافٹ ویئر ٹیسٹنگ میں ایک اہم خصوصیت ہیں۔ فنکشنل انٹرفیس جانچ کے لیے یونٹوں کو الگ کرنا آسان بناتا ہے، ایپ کوڈ کی پڑھنے کی اہلیت اور انتظام کو بہتر بناتا ہے۔

جاوا میں پریڈیکیٹ سنٹیکس

java.util.function.Predicate کو جاوا 8 میں لامبڈا میں تشخیصی نقوش کو سنبھالنے کے متبادل طریقے کے طور پر متعارف کرایا گیا تھا۔ انٹرفیس کا معیاری نقطہ نظر ہے Predicate<T> ، جہاں T ایک واحد دلیل ہے جو بولین ویلیو لوٹاتی ہے۔ Java Predicates میں ایک فنکشنل (خلاصہ) طریقہ ٹیسٹ (آبجیکٹ) ہوتا ہے جو کسی دیے گئے آبجیکٹ پر اس پیشین گوئی کا اندازہ کرتا ہے۔
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
یہاں ایک سادہ پیش گوئی لکھنے کی ایک مثال دی گئی ہے جو "زیادہ سے زیادہ"، "اس سے کم" کی شرائط پر مبنی عدد کو فلٹر کرتا ہے۔
// An example of a simple Java predicate

import java.util.function.Predicate;
public class PredicateExample {
    public static void main(String[] args)
    {
        // Creating predicate
        Predicate<Integer> lesserThan = i -> (i < 18);

        // Calling Predicate method
        System.out.println(lesserThan.test(10));
    }
}
آؤٹ پٹ درست ہوگا کیونکہ 10 < 18۔ ایک اور مثال Predicate in filter() کے ساتھ ۔ Predicate عمر کی فہرست سے تمام بالغوں کو فلٹر کرنے میں مدد کرتا ہے۔
import java.util.List;
  import java.util.function.Predicate;

  public class PredicateExample {
      public static void main(String[] args) {
          List<Integer> ages = List.of(17, 18, 19, 28, 18, 28, 46, 7, 8, 9, 21, 12);
          NotLessThan18<Integer> isAdult = new NotLessThan18<>();
          ages.stream().filter(isAdult).forEach(System.out::println);
      }
  }



class NotLessThan18<E> implements Predicate<Integer> {

      @Override
      public boolean test(Integer v) {
          Integer ADULT = 18;
          return v >= ADULT;
      }
  }
آؤٹ پٹ ہے:
18 19 28 18 28 46 21

جاوا 8 پیشین گوئی کے طریقے

Predicate انٹرفیس میں مٹھی بھر طریقے ہیں۔
  • بولین ٹیسٹ (ٹی ٹی) دی گئی دلیل پر پیش گوئی کا اندازہ کرتا ہے۔
  • پہلے سے طے شدہ Predicate<T> اور (Predicate<? super T> other) ایک پیشین گوئی لوٹاتا ہے جو ایک مختصر سرکٹنگ منطقی AND کی نمائندگی کرتا ہے۔
  • پہلے سے طے شدہ Predicate<T> یا ایک ایسا کمپوزڈ predicate لوٹاتا ہے جو اس predicate اور دوسرے کے شارٹ سرکیٹنگ منطقی OR کی نمائندگی کرتا ہے۔
  • ڈیفالٹ Predicate<T> negate() ایک پیشین گوئی واپس کرتا ہے جو منطقی طور پر اس پیشین گوئی کے مخالف ہے۔
  • پہلے سے طے شدہ Predicate<T> isEqual(Object targetRef) جانچ کا نتیجہ لوٹاتا ہے اگر دو دلائل Objects.equals(Object, Object) کے مطابق برابر ہوں ۔

بولین ٹیسٹ (ٹی ٹی)

یہ Java predicate کے لیے ایک فعال طریقہ ہے جو اس بات کا جائزہ لیتا ہے کہ آیا کوئی دلیل پیش گوئی کی شرط کو پورا کرتی ہے یا نہیں۔ مثال: یہاں ہم 18 سال یا اس سے زیادہ کی عمر کے ہر فرد کے لیے ایک پیشوا بالغ بناتے ہیں۔ test() طریقہ ایک عددی قدر حاصل کرتا ہے اور اسے چیک کرتا ہے۔
import java.util.function.Predicate;
public class PredicateTestTest {
   public static void main(String[] args) {
       Predicate<Integer> adult = i -> i >= 18;
       System.out.println(adult.test(12));
       System.out.println(adult.test(19));
       System.out.println(adult.test(21));
   }
}
مندرجہ بالا کوڈ کا آؤٹ پٹ کیا ہوگا؟ پہلی صورت میں، چونکہ 12 18 سے کم ہے، یہ غلط ہوگا۔ جہاں تک دوسرے اور تیسرے منظر نامے کا تعلق ہے، شرائط پوری ہو جاتی ہیں تو واپسی درست ہو گی۔
جھوٹ سچ سچ

پہلے سے طے شدہ Predicate.and()

یہ طریقہ "اور" آپریٹر کی نمائندگی کرتا ہے۔ اسی لیے، اگر دی گئی پیشین گوئیوں میں سے کوئی ایک مقررہ شرط کی تعمیل نہیں کرتا ہے، تو دوسری کو تشخیص نہیں ملے گی۔ مثال: آئیے جاوا میں پیشین گوئیاں لکھتے ہیں، ان تمام لوگوں کو فلٹر کرتے ہیں جو پہلے سے بالغ ہیں لیکن 65 سال سے کم عمر ہیں and() ۔ آئیے predicate.add () کا استعمال کریں اور ان شرائط کے لیے lambda کے ساتھ java predicate لکھیں: اگر شرط درست ہے تو ایپ درج ذیل بیان کو واپس کرے گی۔
import java.util.function.Predicate;

   public class PredicateDemo {
       public static void main(String[] args) {
           Predicate<Integer> adultYet = i -> i >= 18;
           Predicate<Integer> adultStill = i -> i < 65;
           System.out.println(adultYet.and(adultStill).test(5));
           System.out.println(adultYet.and(adultStill).test(38));
           System.out.println(adultYet.and(adultStill).test(90));
       }
   }
آؤٹ پٹ ہے:
جھوٹا سچ جھوٹ

پہلے سے طے شدہ Predicate.or()

Predicate.or() طریقہ "OR" آپریٹر کی نمائندگی کرتا ہے۔ اس کا مطلب یہ ہے کہ شرط صحیح رہے گی چاہے دو پیشین گوئیوں میں سے ایک درست ہو اور دوسری غلط ہو۔ مثال: آئیے اب کریکٹر سٹرنگز کا جائزہ لیتے ہیں۔ ان تمام فقروں کو ترتیب دینے کے لیے OR طریقہ استعمال کرنے کی کوشش کریں جن میں سبسٹرنگ "my" یا "crayon" ہو۔
import java.util.function.Predicate;

  public class PredicateDemo2 {
      public static void main(String[] args) {
          Predicate<String> containsA = t -> t.contains("crayon");
          Predicate<String> containsB = t -> t.contains("my");
          System.out.println(containsA.or(containsB).test("here is my crayon"));
          System.out.println(containsA.or(containsB).test("here is my pencil"));
          System.out.println(containsA.or(containsB).test("here is John's crayon"));
          System.out.println(containsA.or(containsB).test("here is John's pencil"));
      }
  }
آؤٹ پٹ ہے:
سچ سچ سچ جھوٹ

پہلے سے طے شدہ Predicate negate()

negate() طریقہ ان تمام اقدار کو جمع کرنے کے لیے استعمال کیا جاتا ہے جو پہلے سے طے شدہ معیار کے مطابق نہیں ہیں۔ مثال: اگر آپ "Tomatoes" کی کلاس میں چھانٹنا چاہتے ہیں اور تمام اندراجات تلاش کرنا چاہتے ہیں جو "Red" نہیں ہیں، تو آپ ایک Predicate لکھ ​​سکتے ہیں اور پوری ترتیب کو تیزی سے اسکین کر سکتے ہیں۔ اس کے لیے کوڈ خود لکھنے کی کوشش کریں اور ایک بار جب آپ کام کر لیں تو اسے حل کے خلاف چیک کریں۔
import java.util.function.Predicate;

public class PredicateDemo3 {
public static void main(String[] args) {
 Predicate<Integer> adult = i -> i >= 18;
System.out.println(adult.negate().test(7));  System.out.println(adult.negate().test(19))
  }
   }
آؤٹ پٹ ہے:
درست غلط

static Predicate isEqual (آبجیکٹ ٹارگٹ ریف)

یہ طریقہ انتہائی مفید ہے اگر آپ یہ تعین کرنا چاہتے ہیں کہ آیا دو آبجیکٹ ایک قدر کے برابر ہیں جسے Objects.equals() کے پیرامیٹر کے طور پر بیان کیا گیا ہے۔ یہ طریقہ خاص طور پر مفید ہے اگر آپ کو اسی طرح کے ٹیسٹ کے نتائج کا موازنہ کرنے کی ضرورت ہو۔ مثال: ہم کہتے ہیں کہ آپ ناشپاتی کی دو گاڑیوں کا موازنہ کر رہے ہیں اور یہ یقینی بنانا چاہتے ہیں کہ آیا دونوں میں معیاری وزن اور رنگ کے پھل ہیں۔ اس صورت میں، static Predicate isEqual(Object targetRef) بالکل وہی طریقہ ہے جس کی آپ کو ضرورت ہے۔ آئیے ایک نظر ڈالتے ہیں کہ isEqual دو تاروں کی مساوات کو کیسے چیک کرتا ہے:
import java.util.function.Predicate;

public class PredicateDemo2 {
   public static void main(String[] args) {
       Predicate<String> i = Predicate.isEqual("here is my crayon");
       System.out.println(i.test("here is my pencil"));
       System.out.println(i.test("here is my crayon"));
   }
}
اگر آپ جس چیز کا تجزیہ کر رہے ہیں وہ معیاری شرائط کے مطابق ہے، تو فنکشن درست ہو جائے گا۔ آؤٹ پٹ ہے:
جھوٹ سچ

Java IntPredicate

Java IntPredicate ایک فعال انٹرفیس ہے، لہذا آپ اسے لیمبڈا اظہار یا طریقہ کار کے حوالہ کے لیے اسائنمنٹ ہدف کے طور پر استعمال کر سکتے ہیں۔ IntPredicate ایک عدد پر کام کرتا ہے اور شرط کی بنیاد پر ایک predicate قدر لوٹاتا ہے۔ جیسا کہ Predicate انٹرفیس، IntPredicate میں test() , and() , negate() , or() طریقے ہیں۔ یہاں IntPredicate کی ایک مثال ہے۔ یہ صف سے تمام بالغوں (18 یا اس سے زیادہ) کو بھی فلٹر کرتا ہے۔
import java.util.Arrays;
import java.util.function.IntPredicate;

public class IntPredicateExample {

   public static void main(String[] args) {

       int[] ages = { 18, 28, 18, 46, 90, 45, 2, 3, 1, 5, 7, 21, 12 };

       IntPredicate p = n -> n >= 18;

       Arrays.stream(ages).filter(p).forEach(System.out::println);
   }
}
آؤٹ پٹ ہے:
18 28 18 46 90 45 21

جاوا میں کلین پریڈیکیٹ لکھنا

Java Predicates انتہائی فعال اور کام کرنے کے لیے مزے دار ہیں۔ تاہم، جب تک آپ اس بات کو ذہن میں نہیں رکھتے کہ آپ کے لکھنے والے لیمبڈا اظہارات کوڈ پر کیسے اثر انداز ہوتے ہیں، گندی پیشین گوئیوں کے ساتھ کوڈ کی برقراری کو کم کرنے کا خطرہ ہے۔ یہاں کچھ آسان طریقے ہیں جو آپ کو یہ یقینی بنانے میں مدد کریں گے کہ آپ کے فنکشنل انٹرفیس کا انتظام اور پڑھنے میں آسان ہے۔
  • اپنے آپ کو نہ دہرائیں — جاوا کے ساتھ ایک سے زیادہ مرتبہ دہرائی جانے والی اقدار، طریقوں اور شرائط کے ساتھ پیشین گوئیاں تحریر نہ کریں۔ اس طرح، آپ اپنا نتیجہ خیز وقت ضائع کرتے ہیں اور کوڈ کو گندا کرتے ہیں۔
  • جانچ کی اہلیت کو یقینی بنانے کے لیے ایپ کوڈ سے الگ پیشین گوئیاں۔ اس کے علاوہ، ایک predicate یونٹ ٹیسٹنگ شیڈول بنائیں اور اس پر قائم رہیں۔
  • اس بات کو یقینی بنانے کے لیے درآمدات اور کمپوزیشن پیٹرن استعمال کریں کہ آپ کی کلاسیں پھولی ہوئی نہیں ہیں اور ان کا انتظام کرنا آسان ہے۔
  • جاوا پیشین گوئی کو ہیلپر کلاسز میں منتقل کرنے پر غور کریں - اس طرح، آپ اپنے کوڈ کی دوبارہ استعمال کو بہتر بناتے ہیں اور دیکھ بھال میں سہولت فراہم کرتے ہیں۔
  • پڑھنے کی اہلیت - جب بھی ممکن ہو، پیچیدہ پیشین گوئیوں پر ایک سطری بیانات کو ترجیح دیں۔ پیچیدہ فنکشنل انٹرفیس کے بارے میں آپ کی سمجھ کو ظاہر کرنا پرکشش ہوسکتا ہے۔ تاہم، جب دیکھ بھال کی بات آتی ہے، تو کم زیادہ ہوتا ہے۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION