জাভাস্ক্রিপ্ট পরিবর্তনশীল সংজ্ঞা: কমাস বনাম সেমিকোলন


89

সেমিকোলনের পরিবর্তে ভেরিয়েবলের একটি গ্রুপ ঘোষণা করার সময় কমা ব্যবহার করার পার্থক্য এবং / অথবা সুবিধাগুলি কোনটি।

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

var foo = 'bar', bar = 'foo';

বনাম

var foo = 'bar';
var bar = 'foo';

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

উত্তর:


73

কোনও পারফরম্যান্সের সুবিধা নয়, কেবল ব্যক্তিগত পছন্দ এবং শৈলীর বিষয়।

প্রথম সংস্করণটি আরও সংক্ষিপ্ত।


হালনাগাদ:

তারের ওপরে যে পরিমাণ ডেটা যাচ্ছে তার পরিপ্রেক্ষিতে অবশ্যই কম ভাল, তবে varআসল প্রভাব দেখতে আপনার অনেকগুলি মুছে ফেলার ঘোষণার নরকের প্রয়োজন হবে ।

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


8
আপনার জাভাস্ক্রিপ্ট মিনিমিশ করার সময় একটি পারফরম্যান্স সুবিধা রয়েছে।
রায়ান কিনাল

4
@ রায়ান কিনাল - প্রশ্নটিতে ঠিক কোথায় দেখছেন আপনি ক্ষুদ্রতম উল্লেখ করেছেন?
ওপড

4
@ ওডেড - মিনিফিকেশন পারফরম্যান্সের উদ্বেগগুলির সাথে সামঞ্জস্য। অতএব, যদি কোনও শৈলী নিজেকে আরও ভাল পরিমার্জনে ndsণ দেয়, তবে এটি পরোক্ষভাবে নিজেকে পারফরম্যান্সের উদ্বেগের জন্য ndsণ দেয়
STW

7
@ রায়ান: গুগল ক্লোজার কমপাইলারের মতো ভাল মিনিফায়ারগুলি একাধিক ভেরি
ড্যানিয়েল

4
হ্যাঁ তুমিই ঠিক. কৌতূহলের বাইরে আমি একটি পরীক্ষা ( jsperf.com/… ) তৈরি করেছি, এটি 5 বার চালিয়েছি এবং 5 টি পৃথক উত্তর পেয়েছি। সুতরাং, ওঁ, হ্যাঁ, এটি স্টাইল এবং ব্যক্তিগত পছন্দগুলি সম্পর্কে, পারফরম্যান্স নয়।
ডেরেক হেন্ডারসন

29

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

var a = doSomethingA,
    b = doSomethignB,
    c = doSomethingC;

প্রতি:

var a = doSomethingA;
var b = doSomethignB;
var c = doSomethingC;

এতক্ষণে, আমি দ্বিতীয় বৈকল্পিকটি অনেক ক্লিনার খুঁজে পেয়েছি, এটির ডিবাগার ইস্যু সমাধানের সুবিধার কথা উল্লেখ না করে।

"তারের মাধ্যমে কম কোড" আর্গুমেন্টটি প্ররোচিত নয়, কারণ সেখানে মিনিফায়ার রয়েছে।


4
আমি আসলে এটি নিজেই অভিজ্ঞতা পেয়েছি। আমি সাধারণত ঘোষণাকে বিভক্ত করি যেখানে আমার কিছু পরীক্ষা করতে debuggerহবে এবং সেখানে একটি ড্রপ রেখে অন্যটি যুক্ত করুন varএবং সেগুলি কমাতে শৃঙ্খলাবদ্ধ রাখুন। তারপরে আমার ডিবাগিং শেষ হয়ে গেলে আমি ফিরে যাই debuggerএবং অতিরিক্তটি সরিয়ে ফেলি var
কলিন ক্ল্লোফেনস্টাইন

7
দ্বিতীয় রূপটি গিট ইতিহাসকে আরও পরিষ্কার করে তোলে। অন্য ভেরিয়েবল যুক্ত করার আগে একটি আঞ্চলিক সেমিকোলনকে কমাতে পরিবর্তন করার পরিবর্তে বা বৈশ্বিক ভেরিয়েবল তৈরি করার ঝুঁকি নিয়ে আপনি কেবল একটি সম্পূর্ণ ভেরি স্টেটমেন্ট যুক্ত করুন।
payne8

উল্লেখ করার জন্য, প্রথম ফর্ম ভুলভাবে আপনাকে ভাবতে পারে খ বা সি বিশ্বব্যাপী।
garg10may

18

আমি var-per-variableস্বরলিপিটি পছন্দ করি :

var a = 2
var b = 3

কারণ অন্য comma-instead-of-another-varস্বরলিপিটিতে এই তিনটি ত্রুটি রয়েছে:

1. বজায় রাখা কঠিন
এই কোডটি বিবেচনা করুন:

var a = 1,
    b = mogrify(2),
    c = 3

কিন্তু আরে, মোগরিফি কি করে? এটি জানতে খ মুদ্রণ করা যাক:

var a = 1,
    b = mogrify(2),
    console.log(b)
    c = 3

স্টাফ ব্রেক

2. পড়া শক্ত

লাইনের ভিক্ষাবৃত্তির বর্ণটি পরিষ্কারভাবে যোগাযোগ করে যে সেখানে একটি নতুন পরিবর্তনশীল শুরু হবে।

var get_all_unicorn_promise = db.get_all_unicorns((unicorn) => {
        unicorn.legs.map((leg) => {
            leg.log('yes')
        })
    }).sort(),
    c = 3

ঠিক কী c = 3করছে সেখানে?

3. ধারাবাহিক না

এই বিবেচনা:

var a = 1,
    b = 2,
    c = 3

var-per-variableপ্রতিটি ঘোষণার সাথে একই কাঠামো অনুসরণ করুন। comma-instead-of-another-varপ্রথম ভেরিয়েবলের সাথে অন্যের চেয়ে আলাদাভাবে ঘোষিত হয়। যদি আপনি সিদ্ধান্ত নেন, বলুন, চক্রের জন্য প্রথম ভেরিয়েবলটি সরান, আপনাকে ঘোষণার মাঝখানে ভ্যারিয়েবল যুক্ত করতে হবে

অগ্রাধিকার ব্যতীত, মনে হয় বেশিরভাগ উল্লেখযোগ্য প্রকল্পগুলি var-per-variableস্বরলিপিটি ব্যবহার করে


এই কুরুচিপূর্ণ শৈলীর উদাহরণের জন্য (অন্যরকমের পরিবর্তে কমা-পরিবর্তে) এটি করা এবং মানুষকে বিভ্রান্ত করার জন্য, স্ট্যাকওভারফ্লো
স্কট ওয়েভার

7

আমি অন্যান্য উত্তরদাতাদের সাথে একমত যে এটি মূলত ব্যক্তিগত স্টাইলের বিষয়। তবে আলোচনায় "প্রামাণিক" মতামত আনতে, ডাব্লাস ক্রকফোর্ড জনপ্রিয় জেএসলিন্ট সরঞ্জামটির ওয়েবসাইটে এটি বলেছেন :

তবে জাভাস্ক্রিপ্টের ব্লক স্কোপ নেই বলে ফাংশনের শীর্ষে ফাংশনের সমস্ত ভেরিয়েবল ঘোষণা করা বুদ্ধিমানের কাজ। এটি ফাংশন প্রতি একক বর্ণ বিবৃতি ব্যবহার করা বাঞ্ছনীয়। এটি onevarবিকল্পের সাথে প্রয়োগ করা যেতে পারে ।


6
উল্লেখ্য মোজিলা জাভাস্ক্রিপ্ট (মাধ্যমে যে মূল্য হতে পারে letকনস্ট্রাক্ট) করে ব্লক সুযোগ আছে।
ব্ল্যাকভেজেবল

4
@ ব্ল্যাকভিজেটেবল letকেবল মজিলা জেএসের চেয়ে বেশি ব্যবহার করা যেতে পারে ( এখানে দেখুন )। এটি ES6 স্পেসিফিকেশনের অংশ , তবে বেশিরভাগ ব্রাউজারগুলি এখনও ES6 এর বৈশিষ্ট্যগুলি বাস্তবায়নে কাজ করছে।
mbomb007

3

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

অন্যদিকে, একই লেখক, ডগলাস ক্রকফোর্ড বলেছেন, প্রতিটি কোডকে তার কোডিং কনভেনশনে তার নিজস্ব লাইনে রাখুন । সুতরাং আপনি varযদি এটি ব্যবহার করেন তবে আপনি জেএসলিন্টে "সমস্ত ফাংশন প্রতি ফাংশন" চেকবাক্সটি চেকবক্সটি চেক করতে পারেন। ;-)


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

2

আমি মনে করি না কোন পার্থক্য আছে যেহেতু আমি উদ্বিগ্ন এটি কেবল ব্যক্তিগত পছন্দ।

আমি একাধিক বর্ণের ঘোষণাকে ঘৃণা করি তাই আমি সাধারণত:

var 
   one
  ,two
  ,three
  ,four
;

এটি যেমন খাটো এবং তর্কসাপেক্ষে আরও পাঠযোগ্য, ততক্ষণ varতাকাতে হবে না।


22
"যুক্তিযুক্ত" তে কীওয়ার্ড। আমি যদি এই নমুনাটি আমাদের মধ্যে পাই তবে এটি var one, two, three four;খুব দ্রুত হয়ে উঠবে । জাভাস্ক্রিপ্টে লাইনগুলির জন্য-লাইনগুলি যুক্ত করা বিপজ্জনক হতে পারে (জেএস দোভাষী তাদের নিজস্ব সন্নিবেশ করতে পারে ;- আপনি যদি এটি অনুমান করেন না তবে আপনি দ্রুত পার্শ্ব প্রতিক্রিয়া খুঁজে পাবেন। এছাড়াও, নেতৃস্থানীয় ,বাগ আমাকে , কীওয়ার্ডগুলি তাদের নিজস্ব লাইন আমাকে বাগ করছে, ;তার নিজস্ব লাইনেই আমাকে বাগ দেয় you আপনি কি লাইন দিয়ে অর্থ প্রদান করছেন?
STW

8
@ এসটিডব্লিউ - আপনি স্বতন্ত্র ব্রাউজারগুলির ঝকঝকে সাপেক্ষে স্বয়ংক্রিয় সেমিকোলন সন্নিবেশের শব্দটি তৈরি করেন তবে বাস্তবে এটি কেবলমাত্র নিয়মগুলির একটি সংজ্ঞায়িত সেট অনুসারে ঘটে এবং আপনার উদ্বেগ হওয়ার দরকার নেই যে এটি ঘটতে পারে might আপনার varঘোষণার মাঝখানে (যদিও আমি আপনাদের সাথে শীর্ষস্থানীয় কমা, এবং varচূড়ান্ত সেমিকোলনটি তাদের নিজস্ব লাইনে থাকার বিষয়ে একমত - তিনটি আমাকেও বাগ
লাগিয়ে দিন

4
আমি মনে করি না যে এটি সত্যই প্রশ্নের উত্তর দেয়, কারণ প্রশ্নটি ব্যক্তিগত পছন্দ সম্পর্কে নয়।
কিথ পিনসন

2

যেহেতু আমি এর কোনও উল্লেখ দেখতে পাচ্ছি না, তাই এখানে ইসিএমএ-262 নির্দিষ্টকরণের লিঙ্ক রয়েছে, যা জাভাস্ক্রিপ্টের অন্তর্নিহিত বৈশিষ্ট spec পৃষ্ঠাটির ব্যাকরণটি বলে:

12.2 Variable Statement

Syntax

  VariableStatement :
    var VariableDeclarationList ;

  VariableDeclarationList :
    VariableDeclaration
    VariableDeclarationList , VariableDeclaration

  VariableDeclarationListNoIn :
    VariableDeclarationNoIn
    VariableDeclarationListNoIn , VariableDeclarationNoIn

  VariableDeclaration :
    Identifier Initialiseropt

  VariableDeclarationNoIn :
    Identifier InitialiserNoInopt

  Initialiser :
    = AssignmentExpression
  InitialiserNoIn :
    = AssignmentExpressionNoIn

আপনি এটি থেকে কী সংগ্রহ করতে পারেন তা কমা ব্যবহার করে বা কিছু যায় আসে না। যেভাবেই হোক না কেন, এটি একটি হিসাবে পার্স করা শেষ হয় VariableDeclarationএবং ঠিক একইরকম আচরণ করা হয়। স্ক্রিপ্ট ইঞ্জিন দুটি ঘোষণার সাথে কীভাবে আচরণ করে তাতে কোনও পার্থক্য থাকা উচিত না। অন্যান্য উত্তরে ইতিমধ্যে উল্লিখিত একমাত্র পার্থক্যগুলি হবে - VariableDeclarationsস্ক্রিপ্টটি সংকলিত হওয়ার পরে সমস্ত স্থান সন্ধান করতে ব্যাকরণ প্রয়োগ করতে যত বেশি সময় লাগবে সে বিষয়ে আরও স্থান সঞ্চয় করা এবং ব্যবহারিকভাবে অপরিমেয় পার্থক্য ।


1

প্রথমটি কয়েকটি অক্ষর সংরক্ষণ করে - তাই জেএস ফাইলাইজ এবং সেইজন্য ব্যান্ডউইথ খরচ হিসাবে খুব সামান্য সঞ্চয় রয়েছে। একমাত্র সময় এটি লক্ষণীয় হয়ে উঠবে চরম ক্ষেত্রে।


এটি ধরে নিয়েছে যে আপনি নিজের ফাইলগুলি মাইনাইফ করছেন না --- এবং গুরুত্ব সহকারে, এই দিনগুলিতে কে তাদের ফাইলগুলিকে ছোট করে না?
কিথ পিনসন

1

আমি দ্বিতীয় সংস্করণটি পছন্দ করি (প্রত্যেকটির নিজস্ব রয়েছে var)। আমি মনে করি এটি কারণ আমি একটি সি ++ ব্যাকগ্রাউন্ড থেকে এসেছি। সি ++ তে আপনি আপনার প্রথম উদাহরণে যেমন চলকগুলি ঘোষণা করতে পারেন তবে তা ভ্রূণ্য হয় (আপনি যখন সেভাবে পয়েন্টার তৈরি করার চেষ্টা করছেন তখন এটি সহজেই ভুলের দিকে পরিচালিত করে)।


4
আকর্ষণীয় বিষয়, তবে আমি নিশ্চিত নই যে এই জাভাস্ক্রিপ্ট সিনট্যাক্সের প্রকৃত সুবিধা এবং অসুবিধাগুলি কী তা এই প্রশ্নের উত্তর দেয় ।
কিথ পিনসন

1

আপনি যদি আপনার জাভাস্ক্রিপ্ট মিন্ট করে দিচ্ছেন তবে মোটামুটি বড় সুবিধা রয়েছে:

var one, two, three, four;

হয়ে যায়

var a, b, c, d;

যেখানে হিসাবে

var one;
var two;
var three;
var four;

হয়ে যায়

var a;
var b;
var c;
var d;

এটি অতিরিক্ত তিনটি উদাহরণ var, যা সময়ের সাথে যুক্ত হতে পারে।

"আরও ভাল জাভাস্ক্রিপ্ট মিনিফিকেশন" পার্ট 1 এবং পার্ট 2 এর "একটি তালিকা সংযুক্ত" নিবন্ধ সিরিজ দেখুন series


6
গুগল ক্লোজার কম্পাইলারের মতো ভাল মিনিফায়ারগুলি একাধিক ভেরি স্টেটমেন্টগুলিকে একটিতে মার্জ করবে: img840.imageshack.us/img840/3601/closurecompilers Services.jpg । অতএব এই যুক্তিটি কেবল তখনই দাঁড়ায় যদি আপনি কম স্মার্ট মিনিফায়ার ব্যবহার করেন ... যা আপনার করা উচিত নয় :)
ড্যানিয়েল ভ্যাসাল্লো

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