JavaRush /جاوا بلاگ /Random-SD /جاوا 8 ۾ لوپس مان نجات حاصل ڪرڻ
KapChook
سطح
Volga

جاوا 8 ۾ لوپس مان نجات حاصل ڪرڻ

گروپ ۾ شايع ٿيل
جاوا 8 ۾ متعارف ٿيل فنڪشنل انداز ٻولي لاء هڪ وڏو اضافو آهي. هاڻي جاوا خالص OOP نه آهي، هاڻي اهو OOP ۽ فنڪشنل پروگرامنگ جو هڪ هائبرڊ آهي. هي هڪ راند بدلائيندڙ آهي ۽ اسان کي انهن تبديلين کي جذب ڪرڻ لاءِ اسان جي OOP دماغ کي تبديل ڪرڻ جي ضرورت آهي. جاوا 8 - 1 ۾ لوپس مان نجات حاصل ڪرڻپر اسان کي انهن تبديلين کي ڇو قبول ڪرڻ گهرجي؟ اسان کي هڪ فنڪشنل انداز سان گڏ حاصل ڪرڻ جي ڪوشش ۾ وقت ڇو ضايع ڪرڻ گهرجي جڏهن اسان خالص OOP استعمال ڪندي مسئلو حل ڪري سگهون ٿا؟
  • جاوا 8 ۾ متعارف ٿيل فنڪشنل انداز اسان کي ڪاروباري منطق ۽ ڪوڊ جي وچ ۾ فرق کي گهٽائڻ ۾ مدد ڪري ٿو. اهو اسان کي ڪهاڻي ٻڌائڻ جي اجازت ڏئي ٿو قدرتي وهڪري ۾ هڪ اعلي سطح تي. اهو چوڻ بدران ته توهان اهو ڪيئن ڪرڻ چاهيو ٿا، توهان اهو چئي سگهو ٿا ته توهان ڇا ڪرڻ چاهيو ٿا.

  • ڪوڊ صاف ۽ وڌيڪ جامع ٿيندو.

  • هاء آرڊر افعال اسان کي اجازت ڏين ٿا:

    • ڪمن کي ٻين ڪمن ڏانهن موڪليو
    • ٻين ڪمن جي اندر فنڪشن ٺاهيو
    • ٻين ڪمن مان افعال واپس آڻيو

    اها جاوا لاءِ هڪ وڏي فتح آهي، جتي اسان کي اهو ڪرڻ لاءِ شيون موڪلڻ، ٺاهڻ ۽ واپس ڪرڻ گهرجن. اسان ڪوڊ لکڻ جي قابل ٿي وينداسين جيڪو وڌيڪ قابل اعتماد، مرڪوز، ۽ ٻيهر استعمال ڪرڻ آسان آهي.

  • ليمبڊاس جي مهرباني، اسان سست حساب ڪري سگهون ٿا. جڏهن هڪ ليمبڊا اظهار هڪ طريقي جي دليل جي طور تي موڪليو ويو آهي، مرتب ڪندڙ ان جو جائزو وٺندو جڏهن اهو طريقو ۾ سڏيو ويندو آهي. اهو عام طريقو دليلن کان مختلف آهي، جن کي فوري طور تي جائزو ورتو وڃي ٿو.

  • Lambdas لکڻ يونٽ ٽيسٽ کي مزيدار بڻائي ٿو. اهي اسان کي هلڪو وزن ٽيسٽ ٺاهڻ جي اجازت ڏين ٿا جيڪي صاف، سائيز ۾ ننڍا، ۽ جلدي لکڻ لاء. اسان ليمبڊاس استعمال ڪندي ٽيسٽ تحت ڪوڊ ڪڍي سگھون ٿا. هي اسان کي جانچڻ جي اجازت ڏئي ٿو ته سڀني قسمن جا منظرنامو ڪوڊ کي ڪيئن متاثر ڪندا.

  • سکڻ لاءِ نوان نمونا.

  • ۽ گهڻو ڪجهه!

پر ڪافي پاڻي، هن مقالي ۾ اسان کي روايتي cycles جي متبادل حل تي هڪ نظر ايندي. يقينا، سائيڪل لچڪدار آهن، پر اهو قيمت کان سواء نٿو اچي. break، ڊرامائي طور تي لوپ جي رويي کي تبديل ڪندي، اسان کي نه رڳو اهو سمجهڻ تي مجبور ڪري ٿو ته ڪوڊ حاصل ڪرڻ جي ڪوشش ڪري رهيو آهي، continueپر returnاهو پڻ سمجهڻ لاء ته لوپ ڪيئن ڪم ڪري ٿو. هاڻي اسان هڪ نظر وجهنداسين ته ڪيئن اسان لوپس کي وڌيڪ جامع ۽ پڙهڻ لائق ڪوڊ ۾ تبديل ڪري سگهون ٿا.

اچو ته ڪوڊنگ شروع ڪريو!

اسان آرٽيڪل سان ڪم ڪنداسين. هڪ مضمون ۾ هڪ عنوان، ليکڪ ۽ ڪيترائي ٽيگ آهن.
private class Article {

    private final String title;
    private final String author;
    private final List<String> tags;

    private Article(String title, String author, List<String> tags) {
        this.title = title;
        this.author = author;
        this.tags = tags;
    }

    public String getTitle() {
        return title;
    }

    public String getAuthor() {
        return author;
    }

    public List<String> getTags() {
        return tags;
    }
}
هر مثال ۾ لوپ استعمال ڪندي روايتي حل ۽ جاوا 8 جي نئين خاصيتن کي استعمال ڪندي هڪ حل شامل هوندو. پهرين مثال ۾، اسين "جاوا" ٽيگ سان گڏ ڪيل پهريون مضمون ڳولڻ چاهيون ٿا. اچو ته هڪ لوپ استعمال ڪندي حل تي هڪ نظر وٺو.
public Article getFirstJavaArticle() {

    for (Article article : articles) {
        if (article.getTags().contains("Java")) {
            return article;
        }
    }
    return null;
}
ھاڻي اچو ته مسئلو حل ڪريون اسٽريم API مان آپريشنز استعمال ڪندي.
public Optional<Article> getFirstJavaArticle() {
    return articles.stream()
        .filter(article -> article.getTags().contains("Java"))
        .findFirst();
    }
تمام سٺو، اهو ناهي؟ اسان سڀ کان پهريان آپريشن استعمال ڪريون ٿا filterسڀ مضمون ڳولڻ لاءِ ٽيگ ”جاوا“ سان، پوءِ استعمال ڪريون ٿا findFirst()پهريون واقعو حاصل ڪرڻ لاءِ. جيئن ته وهڪرو سست آهن ۽ فلٽر هڪ وهڪرو واپس ڪري ٿو، اهو طريقو صرف عناصر تي عمل ڪندو جيستائين اهو پهريون ميچ ڳولي. ھاڻي اچو ته سڀني مضمونن کي ٽيگ ٿيل "جاوا" بجاء صرف پھرين ھڪڙو. پهريون حل لوپ استعمال ڪندي.
public List<Article> getAllJavaArticles() {

    List<Article> result = new ArrayList<>();

    for (Article article : articles) {
        if (article.getTags().contains("Java")) {
            result.add(article);
        }
    }
    return result;
}
وهڪرو آپريشن استعمال ڪندي حل.
public List<Article> getAllJavaArticles() {
    return articles.stream()
        .filter(article -> article.getTags().contains("Java"))
        .collect(Collectors.toList());
    }
هن مثال ۾، اسان هڪ آپريشن استعمال ڪيو collectنتيجي واري وهڪري کي مختصر ڪرڻ لاءِ، بجاءِ گڏ ڪرڻ جو اعلان ڪرڻ ۽ واضح طور تي شامل ڪيل داخلائن کي شامل ڪرڻ بجاءِ. هينئر تائين تمام سٺو. مثالن لاءِ وقت جيڪي اسٽريم API کي واقعي چمڪائيندا. اچو ته ليکڪ جي سڀني مضمونن کي گروپ ڪريون. عام طور تي، اسان ان کي حل ڪندي لوپ استعمال ڪندي شروع ڪريون ٿا:
public Map<String, List<Article>> groupByAuthor() {

    Map<String, List<Article>> result = new HashMap<>();

    for (Article article : articles) {
        if (result.containsKey(article.getAuthor())) {
            result.get(article.getAuthor()).add(article);
        } else {
            ArrayList<Article> articles = new ArrayList<>();
            articles.add(article);
            result.put(article.getAuthor(), articles);
        }
    }
    return result;
}
ڇا اسان وهڪرو آپريشن استعمال ڪندي هن مسئلي جو صاف حل ڳولي سگهون ٿا؟
public Map<String, List<Article>> groupByAuthor() {
    return articles.stream()
        .collect(Collectors.groupingBy(Article::getAuthor));
}
حيرت انگيز! groupingByهڪ آپريشن ۽ طريقي جي حوالي سان استعمال ڪندي getAuthor()، اسان صاف ۽ پڙهيل ڪوڊ حاصل ڪندا آهيون. هاڻي اچو ته مجموعي ۾ استعمال ٿيل باقي ٽيگ ڳوليون. اچو ته لوپ مثال سان شروع ڪريون:
public Set<String> getDistinctTags() {

    Set<String> result = new HashSet<>();

    for (Article article : articles) {
        result.addAll(article.getTags());
    }
    return result;
}
ٺيڪ آهي، اچو ته هڪ نظر رکون ته اسان هن کي ڪيئن حل ڪري سگهون ٿا وهڪرو آپريشن استعمال ڪندي:
public Set<String> getDistinctTags() {
    return articles.stream()
        .flatMap(article -> article.getTags().stream())
        .collect(Collectors.toSet());
}
عمده! flatmapاسان جي مدد ڪري ٿي ٽيگ جي فهرست کي هڪ واحد نتيجن واري وهڪرو ۾، جنهن کي اسين پوءِ collectواپسي سيٽ ٺاهڻ لاءِ استعمال ڪندا آهيون.

لامحدود امکانات

اهي 4 مثال هئا ته ڪيئن لوپس کي وڌيڪ پڙهڻ واري ڪوڊ سان تبديل ڪري سگهجي ٿو. پڪ ڪريو ته اسٽريم API کي چيڪ ڪريو، جيئن ته هن آرٽيڪل صرف سطح کي ڇڪايو آهي. جاوا جي نئين فنڪشنل انداز ۾ مهارت حاصل ڪرڻ OOP ڊولپرز لاءِ هڪ چئلينج هوندو، پر اهو هڪ چيلنج آهي جنهن کي چڱيءَ طرح قبول ڪيو وڃي. مان اڃا به اڳتي وڌندس ۽ چوندس ته توهان کي هڪ خالص فنڪشنل پروگرامنگ ٻولي سکڻ گهرجي. هن طريقي سان توهان مڪمل طور تي سمجهي سگهو ٿا صلاحيتون ۽ طاقت اها مهيا ڪري ٿي. مان سمجهان ٿو ته هي توهان کي ڪنهن ٻئي سطح تي فنڪشنل پروگرامنگ کي سمجهڻ ۾ مدد ڏيندو. تنهن ڪري سٺن پراڻي OOP سان گڏ فنڪشنل پروگرامنگ سکو، ۽ انهن ٻنهي کي استعمال ڪريو اڃا به وڏو ڪوڊ لکڻ لاءِ! ٻن مضمونن جي ترجمن جو هڪ مفت ميلاپ - توهان کي جاوا 8 ۾ فنڪشنل پروگرامنگ ڇو وٺڻ گهرجي ۽ جاوا 8 ۾ لوپس کان پري وڃڻ گهرجي
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION