জাভা 7 এ বন্ধ [বন্ধ]


105

বন্ধ কী? এটি জাভা in-এ অন্তর্ভুক্ত করার কথা রয়েছে। ( জাভা in-এ অন্তর্ভুক্তির জন্য ক্লোজারগুলি আলোচনা করা হয়েছিল, তবে শেষ পর্যন্ত অন্তর্ভুক্ত করা হয়নি।-বিড) কেউ দয়া করে আমাকে এমন কিছু নির্ভরযোগ্য রেফারেন্স সরবরাহ করতে পারেন যেখান থেকে ক্লোজার সম্পর্কে স্টাফ শিখতে পারি?

উত্তর:


59

এখানে নীল গিটারের ব্লগটি জাভাতে ক্লোজার চালু করার অন্যতম অগ্রগামী ers ২৮ শে জানুয়ারী, ২০০ from থেকে বন্ধ হওয়ার বিষয়ে তাঁর পোস্টটির নাম দেওয়া হয়েছে একটি সংজ্ঞা সংজ্ঞা হিসাবে তাঁর ব্লগে আপনাকে ভিডিও শুরু করার পাশাপাশি প্রচুর তথ্য রয়েছে। এখানে একটি দুর্দান্ত গুগল টক - প্রোগ্রামিং ল্যাঙ্গুয়েজে অ্যাডভান্সড টপিকস - নিল গিটারের সাথে জাভার জন্য ক্লোজারসও রয়েছে।


2
সামগ্রিক ব্লগের চেয়ে আপনার কি আরও নির্দিষ্ট লিঙ্ক আছে?
I82Much


1
যদি কেউ আমার মতো বোবা হয়ে থাকে এবং আপনি যদি কেবল প্রাচীরের বিরুদ্ধে মাথা
মারছেন

আমি প্রাথমিকভাবে তাদের কাছে এমন ভাষায় ক্লোজার বাস্তবায়ন করতে পারি না..গিন্ডা পাগল
আলেকজান্ডার মিলস

আলেকজান্ডার মিলস শুধু কৌতূহলী .. কেন?
বার্টজিলা

84

ক্লোজার হ'ল কোডের একটি ব্লক যা এনকোলেসিং স্কোপের ভেরিয়েবলগুলিতে অ্যাক্সেস সহ রেফারেন্স করা যায় (এবং এর পাশ দিয়ে যায়) passed

জাভা ১.১ থেকে, বেনামে অভ্যন্তরীণ শ্রেণি একটি উচ্চ ভারবস পদ্ধতিতে এই সুবিধা সরবরাহ করেছে। তাদের কেবল finalস্থানীয় ভেরিয়েবলগুলি ব্যবহার করতে সক্ষম হওয়ার (এবং স্পষ্টভাবে নির্ধারিত) বিধি নিষেধ রয়েছে । (দ্রষ্টব্য, এমনকি অ- finalস্থানীয় ভেরিয়েবলগুলিও স্কোপে রয়েছে তবে ব্যবহার করা যায় না))

জাভা এসই 8 এর উদ্দেশ্য একক পদ্ধতিতে ইন্টারফেস * এর জন্য এটির আরও সংক্ষিপ্ত সংস্করণ রয়েছে, যার নাম "ল্যাম্বডাস"। লাম্বডাসের বেনামে অভ্যন্তর শ্রেণীর মতো অনেকগুলি একই বিধিনিষেধ রয়েছে, যদিও কিছু বিবরণ এলোমেলোভাবে পরিবর্তিত হয়।

Lambdas অধীনে উন্নয়ন করা হচ্ছে প্রকল্প ল্যামডা এবং JSR 335

* মূলত নকশাটি একক বিমূর্ত পদ্ধতি (এসএএম) ধরণের অনুমতি দেয় আরও নমনীয়। দুর্ভাগ্যক্রমে নতুন ডিজাইনটি কম নমনীয়, তবে ইন্টারফেসের মধ্যে প্রয়োগের অনুমতি দেয়াকে ন্যায়সঙ্গত করার চেষ্টা করে does


7

টম হাটিনের মতে

ক্লোজার হ'ল কোডের একটি ব্লক যা এনকোলেসিং স্কোপের ভেরিয়েবলগুলিতে অ্যাক্সেস সহ রেফারেন্স করা যায় (এবং এর পাশ দিয়ে যায়) passed

এখন আমি জাভাস্ক্রিপ্ট বন্ধের উদাহরণটি উইকিপিডিয়ায় জাভাতে " স্ট্রেইথ " অনুবাদ সহ কার্যকর করার আশায় অনুকরণ করার চেষ্টা করছি :

//ECMAScript
var f, g;
function foo() {
  var x = 0;
  f = function() { return ++x; };
  g = function() { return --x; };
  x = 1;
  print('inside foo, call to f(): ' + f()); // "2"  
}
foo();
print('call to g(): ' + g()); // "1"
print('call to f(): ' + f()); // "2"

এখন জাভা অংশ: ফাংশন 1 হ'ল আরটি 1 (একটি যুক্তি) সহ "ফান্টেক্টর" ইন্টারফেস। ক্লোজার হ'ল ফাংশন 1 প্রয়োগকারী শ্রেণি, একটি কংক্রিট ফান্টেক্টর যা ফাংশন হিসাবে কাজ করে (int -> int)। মূল () পদ্ধতিতে আমি জাভাস্ক্রিপ্ট উদাহরণ থেকে কলগুলি প্রতিলিপি করে একটি ক্লোজার অবজেক্ট হিসাবে কেবলমাত্র ফু ফু ইনস্ট্যান্ট করি। ইন্টবক্স শ্রেণিটি কেবল একটি সাধারণ ধারক, এটি 1 ইনটের অ্যারের মতো আচরণ করে:

int a [1] = {0}

interface Function1   {
    public final IntBag value = new IntBag();
    public int apply();
}

class Closure implements Function1 {
   private IntBag x = value;
   Function1 f;
   Function1 g;

   @Override
   public int apply()  {
    // print('inside foo, call to f(): ' + f()); // "2"
    // inside apply, call to f.apply()
       System.out.println("inside foo, call to f.apply(): " + f.apply());
       return 0;
   }

   public Closure() {
       f = new Function1() {
           @Override
           public int apply()  {
               x.add(1);
                return x.get();
           }
       };
       g = new Function1() {
           @Override
           public int apply()  {
               x.add(-1);
               return x.get();
           }
       };
    // x = 1;
       x.set(1);
   }
}
public class ClosureTest {
    public static void main(String[] args) {
        // foo()
        Closure foo = new Closure();
        foo.apply();
        // print('call to g(): ' + g()); // "1"
        System.out.println("call to foo.g.apply(): " + foo.g.apply());
        // print('call to f(): ' + f()); // "2"
        System.out.println("call to foo.f.apply(): " + foo.f.apply());

    }
}

এটি প্রিন্ট করে:

inside foo, call to f.apply(): 2
call to foo.g.apply(): 1
call to foo.f.apply(): 2 

2
নামের পাশাপাশি আইএমওর বন্ধ হওয়ার সাথে এর কোনও
যোগসূত্র নেই


4

জাভা ক্লোজারগুলি J2SE 8 এর একটি অংশ হতে চলেছে এবং 2012 সালের শেষের দিকে প্রকাশিত হবে।

জাভা 8 এর ক্লোজার সাপোর্টে ল্যাম্বডা এক্সপ্রেশন, পদ্ধতি রেফারেন্স, কনস্ট্রাক্টর রেফারেন্স এবং ডিফল্ট পদ্ধতিগুলির ধারণা অন্তর্ভুক্ত।

আরও তথ্যের জন্য এবং কার্যকারী উদাহরণগুলির জন্য দয়া করে এখানে যান: http://amitrp.blogspot.in/2012/08/at-first-sight-with-closures-in-java.html


1
হুম, তবে জাভা 8 ক্লোজার ভেরিয়েবল পরিবর্তন করার অনুমতি দেয় না। ভাল নিবন্ধ।
নওফাল


0

জাভা 5, 6 এবং 7 এর জন্য একটি ক্লোজার বাস্তবায়ন

http://mseifed.blogspot.se/2012/09/bringing-closures-to-java-5-6-and-7.html

এটিতে যার যার কাছে জিজ্ঞাসা করা যেতে পারে ...


লিঙ্কটি বর্ণনা করে কিছু পাঠ্যে যায় তবে সেই পৃষ্ঠা থেকে লিঙ্ক করা কোডটি বিদ্যমান নেই। বাস্তবায়ন কোথায়?
জেরি জেরেমি

@ জেরি জেরেমিয়া এখানে এটির আলাদা নাম রয়েছে, অরগানালিভাবে উপস্থিত সমস্ত সংস্করণ সেখানে নেই (অ-চূড়ান্ত অ্যাক্সেস এবং অ্যাবস্ট্রাক্ট ক্লাসের মাধ্যমে আরও অনেক কিছু সমর্থন করতে, এটি আবার জাভা ৮ সংস্করণের জন্য যুক্ত করা যেতে পারে, আপনি কোন প্ল্যাটফর্ম? খুঁজছেন?): বিটবকেট.আর.মোমোমো
মিমি

2
লিংক ভেঙে যাচ্ছে!
সানলেও

আমি একটি 404 পেয়েছি লিঙ্কটি মারা গেছে
আলেকজান্ডার মিলস

লিঙ্কটি ভাঙা হয়েছে (এজন্য আমাদের উত্তর হিসাবে লিঙ্কগুলি রাখা উচিত নয় ...)
ওহাদআর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.