`Var {…} =…` বিবৃতিগুলিতে কোঁকড়ানো বন্ধনীগুলি কী করে?


117

এটি মোজিলা-নির্দিষ্ট জেএস সিনট্যাক্স কিনা তা নিশ্চিত নয়, তবে আমি প্রায়শই এইভাবে ভেরিয়েবলগুলি ঘোষিত দেখতে পেলাম, উদাহরণস্বরূপ, অ্যাড-অন এসডিকে ডক্সে :

var { Hotkey } = require("sdk/hotkeys");

এবং বিভিন্ন ক্রোম জাভাস্ক্রিপ্টে ( letবিবৃতিটির জায়গায় ব্যবহার করা হচ্ছে var),

let { classes: Cc, interfaces: Ci, results: Cr, utils: Cu }  = Components;

আমি এটি খুব বিভ্রান্তিকর পেয়েছি তবে এমডিএন- তে এমনকি উভয় সিনট্যাক্স সম্পর্কে কোনও ডকুমেন্টেশন খুঁজে পাচ্ছি না ।


@ ব্লেন্ডার আপনি এই কাঠামোর জন্য সিম্বহাউন্ড ডট কম কীভাবে অনুসন্ধান করবেন?
trusktr

1
@trusktr: কিছুটা দেরি: সিম্বহাউন্ড.com/…
ব্লেন্ডার

সংক্ষিপ্ত উত্তর এখানে: stackoverflow.com/a/45909752/203704
ক্লিফ হল

আমি বেসিক ডিকনস্ট্রাকচারিংয়ের সাথে ভাল আছি। যাইহোক, এই উদাহরণে আমরা পৃথক সম্পত্তির নামের জন্যও মূল্য নির্ধারণ করছি এবং সিনট্যাক্সটি খুব বিভ্রান্তিকর। এটি নির্মাণের সিনট্যাক্সের বিরোধী এবং এটি আরও বিভ্রান্তি যুক্ত করে।
সল

উত্তর:


72

তারা উভয় জাভাস্ক্রিপ্ট 1.7 বৈশিষ্ট্য। প্রথমটি হ'ল ব্লক-স্তর ভেরিয়েবল :

letব্লক, স্টেটমেন্ট বা এক্সপ্রেশন যার উপর এটি ব্যবহৃত হয় তার সীমাটি সীমাবদ্ধ করে আপনাকে ভেরিয়েবলগুলি ঘোষণা করতে দেয়। এটি মূলশব্দের বিপরীতে var, যা বিশ্বব্যাপী একটি পরিবর্তনশীল বা স্থানীয়ভাবে কোনও ব্লক স্কোপ নির্বিশেষে একটি সম্পূর্ণ ফাংশনে সংজ্ঞায়িত করে।

দ্বিতীয়টিকে ডাস্টস্ট্রাকচার বলা হয় :

এস্ট্রাকচারিং অ্যাসাইনমেন্টের সাহায্যে অ্যারে এবং অবজেক্ট ল্যাটারালগুলির নির্মাণের কাজ করে এমন একটি সিনট্যাক্স ব্যবহার করে অ্যারে বা অবজেক্ট থেকে ডেটা বের করা সম্ভব হয়।
...
ধ্বংসাত্মক কার্যভারের জন্য আপনি বিশেষভাবে দরকারী একটি জিনিস হ'ল একটি বিবৃতিতে একটি সম্পূর্ণ কাঠামো পড়া, যদিও তাদের সাথে আপনি করতে পারেন এমন অনেক মজার জিনিস রয়েছে, যা নিম্নলিখিত উদাহরণগুলির পূর্ণাঙ্গ বিভাগে দেখানো হয়েছে।

পাইথনের সাথে পরিচিত তাদের ক্ষেত্রে এটি এই সিনট্যাক্সের অনুরূপ:

>>> a, (b, c) = (1, (2, 3))
>>> a, b, c
(1, 2, 3)

প্রথম কোড অংশটি শর্টহ্যান্ডের জন্য:

var {Hotkey: Hotkey} = require("sdk/hotkeys");
// Or
var Hotkey = require("sdk/hotkeys").Hotkey;

আপনি দ্বিতীয় কোড খণ্ডটি আবার লিখতে পারেন:

let Cc = Components.classes;
let Ci = Components.interfaces;
let Cr = Components.results;
let Cu = Components.utils;

2
আমার পরীক্ষা থেকে, দেখে মনে হচ্ছে var { Hotkey }সমতূল্য var { Hotkey: Hotkey }। ডকুমেন্টেশন সনাক্ত করার জন্য আপনাকে ধন্যবাদ!
টিমড্রিম

@ টিমড্রিম: আমার মনে হয়েছিল এটি এমনই কিছু ছিল তবে এটির থেকে কীভাবে আলাদা var Hotkey = require(...).Hotkey? বা এটি কি কীস্ট্রোকগুলি কেবল সংরক্ষণ করছে?
ব্লেন্ডার

দেখে মনে হচ্ছে: - / ((এই এই অলস প্রোগ্রামার ...)
টিমড্রিম

2
এছাড়াও এটি এমন একটি অস্বাভাবিক সিনট্যাক্স ব্যবহার করতে সবকিছুকে আরও গুপ্ত করে তোলে।
trusktr

দ্বিতীয়টি হ'ল "অবজেক্ট ডেস্ট্রাকচারিং", বিকাশকারীকে
পড়ুন.মোজিলা.আর.ইন- ইউএস

80

আপনি যা দেখছেন তা হ'ল একটি ধ্বংসাত্মক কার্য। এটি হাস্কেলের মতো প্যাটার্ন মেলানোর এক রূপ ।

ডেস্ট্রাকচারিং অ্যাসাইনমেন্ট ব্যবহার করে আপনি অবজেক্ট এবং অ্যারে থেকে মানগুলি বের করতে পারেন এবং অবজেক্ট এবং অ্যারে লিটারাল সিনট্যাক্স ব্যবহার করে সদ্য ঘোষিত ভেরিয়েবলগুলিতে তাদের নির্ধারণ করতে পারেন। এটি কোডটিকে অনেক বেশি সংহত করে।

উদাহরণ স্বরূপ:

var ascii = {
    a: 97,
    b: 98,
    c: 99
};

var {a, b, c} = ascii;

উপরের কোডটি সমান:

var ascii = {
    a: 97,
    b: 98,
    c: 99
};

var a = ascii.a;
var b = ascii.b;
var c = ascii.c;

একইভাবে অ্যারেগুলির জন্য:

var ascii = [97, 98, 99];

var [a, b, c] = ascii;

এটি সমান:

var ascii = [97, 98, 99];

var a = ascii[0];
var b = ascii[1];
var c = ascii[2];

আপনি নিম্নলিখিত হিসাবে একটি বস্তুর সম্পত্তি এক্সট্র্যাক্ট এবং নামকরণ করতে পারেন:

var ascii = {
    a: 97,
    b: 98,
    c: 99
};

var {a: A, b: B, c: C} = ascii;

এটি সমান:

var ascii = {
    a: 97,
    b: 98,
    c: 99
};

var A = ascii.a;
var B = ascii.b;
var C = ascii.c;

এখানেই শেষ এটা পেতে ওখানে যাও.


12
বস্তুর ধ্বংসাত্মক উদাহরণগুলির জন্য +1, তারা সত্যই সহায়ক। MDN উদাহরণ শুধুমাত্র অ্যারের ডেসট্রাকচারিং প্রদর্শন করুন।
ব্লেন্ডার

@ ব্লেন্ডার - তারা বস্তুর ধ্বংসাত্মক উদাহরণ সরবরাহ করে। অবজেক্টের অ্যারেতে মানগুলি জুড়ে লুপিংয়ের দিকে তাকান ।
এডিট এম শাহ

আমি var {a, b, c} = ascii;সিনট্যাক্স বলতে চাইছি
ব্লেন্ডার

এই শেষ উদাহরণটি সত্যই অদ্ভুত কারণ সাধারণত কোলনের বামদিকে যা নির্ধারিত হয় তা হ'ল।
কার্টিস

1

এটি জাভাস্ক্রিপ্টে একটি ধ্বংসাত্মক অ্যাসাইনমেন্ট এবং ES2015 স্ট্যান্ডার্ডের অংশ। এটি অ্যারে থেকে বৈশিষ্ট্যগুলি থেকে পৃথক ভেরিয়েবলগুলিতে মানগুলি আনপ্যাক করে বা বের করে দেয়। যেমন: অ্যারে ডেস্ট্রাকচারিং

var foo = ["one", "two", "three"];
//without destructuring
var one = foo[0];
var two = foo[1];
var three = foo[2];

// ডেস্ট্রাকচারিং ভার সহ [এক, দুই, তিন] = ফু

যেমন: অবজেক্ট ডিস্ট্রাকচারিং uring

var o = {p: 42, q: true}; var {p, q} = o;

console.log (P); // 42 কনসোল.লগ (কিউ); // সত্য

// নতুন পরিবর্তনশীল নামগুলি var {p: foo, q: bar} = o নির্ধারণ করুন;

console.log (foo বিন্যাস); // 42 কনসোল.লগ (বার); // সত্য


0

letএমডিএন-তে বিবৃতি দেওয়ার জন্য ডকুমেন্টেশন রয়েছে : https://developer.mozilla.org/en-US/docs/ জাভা স্ক্রিপ্ট / রেফারেন্স / স্ট্যাটমেন্টস / লেলেট

letvarএটি ঘোষিত ভেরিয়েবলের পরিধি সীমাবদ্ধ করার অনুরূপ । এটি আপনাকে একটি if(){}ব্লকের (বা অন্য কোনও ব্লকের) ভিতরে একটি ভেরিয়েবল ঘোষণা করতে দেয় এবং সেই ব্লকের ভিতরে কেবল সেই পরিবর্তনশীলটি "দৃশ্যমান" থাকতে পারে (জাভাস্ক্রিপ্টের এখন পর্যন্ত কার্যকারিতা রয়েছে এবং বেশিরভাগ অন্যান্য ভাষাগুলির মতো ব্লক স্কোপ নেই)। সুতরাং letমূলত এটি একটি "ফিক্স" যা কিছু লোকের সমস্যা নিয়ে আসে। মনে রাখবেন যে tihs একটি জাভাস্ক্রিপ্ট 1.7 বৈশিষ্ট্য।

কিছুই পাওয়া যায় নি {Foo}


দুঃখিত, আমি ভেবেছিলাম আপনি উভয়ের সম্পর্কে জিজ্ঞাসা করেছেন ... আমার গুগল-ফু যখন আসে তখন {Foo}: /
জান হানিয়ে

আমিও: - / গুগল সূচি দেয় না {এবং }
টিমড্রিম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.