javascript - জাভাস্ক্রিপ্টে কি "কঠোর ব্যবহার" করে এবং এর পিছনে যুক্তি কি?




syntax jslint (17)

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

লাইন 1 চরিত্র 1 এ সমস্যা: অনুপস্থিত "কঠোর ব্যবহার" বিবৃতি।

কিছু অনুসন্ধান করছেন, আমি বুঝতে পেরেছি যে কিছু লোক "use strict"; যোগ করে "use strict"; তাদের জাভাস্ক্রিপ্ট কোড মধ্যে। একবার আমি বিবৃতি যোগ করলে, ত্রুটিটি দেখা বন্ধ হয়ে গেল। দুর্ভাগ্যক্রমে, গুগল এই স্ট্রিং বিবৃতি পিছনে ইতিহাস অনেক প্রকাশ করে না। অবশ্যই ব্রাউজার দ্বারা জাভাস্ক্রিপ্টকে কীভাবে ব্যাখ্যা করা যায় তার সাথে কিছু করার আছে, তবে আমার কোন ধারণা নেই যে এর প্রভাব কী হবে।

তাই "use strict"; কি "use strict"; সব সম্পর্কে, এটা কি বোঝায়, এবং এটা এখনও প্রাসঙ্গিক?

বর্তমান ব্রাউজারগুলির "use strict"; সাড়া দেয় "use strict"; স্ট্রিং বা ভবিষ্যতে ব্যবহারের জন্য এটা?


'use strict'; ব্যবহার 'use strict'; করে 'use strict'; হঠাৎ আপনার কোড ভাল করতে না।

জাভাস্ক্রিপ্ট কঠোর মোড ECMAScript 5 এ একটি বৈশিষ্ট্য। আপনি আপনার স্ক্রিপ্ট / ফাংশনের শীর্ষে এটি প্রকাশ করে কঠোর মোড সক্ষম করতে পারেন।

'use strict';

যখন একটি জাভাস্ক্রিপ্ট ইঞ্জিন এই নির্দেশটি দেখায়, তখন এটি একটি বিশেষ মোডে কোডটি ব্যাখ্যা করতে শুরু করবে। এই মোডে, ত্রুটিযুক্ত করা হয় যখন নির্দিষ্ট কোডিং অনুশীলনগুলি সম্ভাব্য বাগ হওয়ার পরে শেষ হতে পারে (যা কঠোর মোডের পিছনে যুক্তিযুক্ত) সনাক্ত করা হয়।

এই উদাহরণ বিবেচনা করুন:

var a = 365;
var b = 030;

সংখ্যাসূচক আক্ষরিক লাইন আপ তাদের আবেশন মধ্যে, বিকাশকারী অযৌক্তিকভাবে একটি অক্টাল আক্ষরিক সঙ্গে পরিবর্তনশীল b শুরু হয়েছে। অ-কঠোর মোড এটি একটি সংখ্যাসূচক আক্ষরিক হিসাবে মূল্য 24 (মূল 10) সহ ব্যাখ্যা করবে। তবে, কঠোর মোড একটি ত্রুটি নিক্ষেপ করা হবে।

কঠোর মোডে বিশিষ্টতাগুলির একটি অসম্পূর্ণ তালিকার জন্য, এই উত্তরটি দেখুন ।

আমি কোথায় ব্যবহার করা উচিত 'use strict'; ?

  • আমার নতুন জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন: অবশ্যই! আপনি আপনার কোড সঙ্গে মূঢ় কিছু করছেন যখন কঠোর মোড একটি whistleblower হিসাবে ব্যবহার করা যেতে পারে।

  • আমার বিদ্যমান জাভাস্ক্রিপ্ট কোড: সম্ভবত না! যদি আপনার বিদ্যমান জাভাস্ক্রিপ্ট কোডটিতে এমন বিবৃতি থাকে যা কঠোর-মোডে নিষিদ্ধ, তবে অ্যাপ্লিকেশনটি কেবল ভাঙ্গবে। আপনি যদি কঠোর মোড চান তবে আপনার ডিবাগ এবং আপনার বিদ্যমান কোডটি সংশোধন করতে প্রস্তুত থাকা উচিত। কেন 'use strict'; ব্যবহার 'use strict'; করে 'use strict'; হঠাৎ আপনার কোড ভাল করতে না

আমি কঠোর মোড কিভাবে ব্যবহার করবেন?

  1. একটি 'use strict'; আপনার স্ক্রিপ্ট উপরে বিবৃতি:

    // File: myscript.js
    
    'use strict';
    var a = 2;
    ....
    

    নোট করুন যে ফাইল myscript.js সবকিছু কঠোর মোডে ব্যাখ্যা করা হবে।

  2. অথবা, একটি 'use strict'; সন্নিবেশ করান 'use strict'; আপনার ফাংশন শরীরের উপরে বিবৃতি:

    function doSomething() {
        'use strict';
        ...
    }
    

    ফাংশন এর lexical সুযোগ সবকিছু কি কঠোর মোডে ব্যাখ্যা করা হবে। শব্দ lexical সুযোগ এখানে গুরুত্বপূর্ণ। একটি ভাল ব্যাখ্যা জন্য এই উত্তর দেখুন।

কি কঠোর মোড নিষিদ্ধ করা হয়?

কঠোর মোডে নিষিদ্ধ কিছু জিনিস বর্ণনা করার একটি চমৎকার নিবন্ধ খুঁজে পেয়েছি (মনে রাখবেন এটি একটি একচেটিয়া তালিকা নয়):

ব্যাপ্তি

ঐতিহাসিকভাবে, জাভাস্ক্রিপ্ট কিভাবে ফাংশন scoped হয় সম্পর্কে বিভ্রান্ত করা হয়েছে। কখনও কখনও তারা স্ট্যাটিক্যাল স্কোপড বলে মনে হচ্ছে, তবে কিছু বৈশিষ্ট্য তাদের গতিশীলভাবে স্কপড হিসাবে আচরণ করে। এই বিভ্রান্তিকর, প্রোগ্রাম পড়তে এবং বুঝতে কঠিন। ভুল বোঝা বাগ কারণ। এটি কর্মক্ষমতা জন্য একটি সমস্যা। স্ট্যাটিক স্কোপিং কম্পাইল সময়তে ঘটতে পরিবর্তনশীল বাঁধাই অনুমতি দেয়, কিন্তু গতিশীল সুযোগ জন্য প্রয়োজন মানে বাঁধাই রানটাইম বিলম্বিত করা আবশ্যক, যা একটি উল্লেখযোগ্য কর্মক্ষমতা জরিমানা সঙ্গে আসে।

কঠোর মোড প্রয়োজন যে সব পরিবর্তনশীল বাঁধাই স্থিরভাবে সম্পন্ন করা আবশ্যক। তার মানে যে বৈশিষ্ট্যগুলি যা পূর্বে গতিশীল বাঁধাই প্রয়োজন তা নির্মূল বা সংশোধন করা আবশ্যক। বিশেষত, বিবৃতি সহ বাদ দেওয়া হয়, এবং eval ফাংশন এর কলকারখানার পরিবেশের সাথে সংঘাত করার ক্ষমতা গুরুতরভাবে সীমিত করা হয়।

কঠোর কোডের বেনিফিটগুলির মধ্যে একটি হলো এটি প্রক্রিয়া করার সময় YUI সংকোচকারীর মতো সরঞ্জামগুলি আরও ভাল কাজ করতে পারে।

প্রভাব বিস্তার গ্লোবাল ভেরিয়েবল

জাভাস্ক্রিপ্ট গ্লোবাল ভেরিয়েবল implied হয়েছে। আপনি স্পষ্টভাবে একটি পরিবর্তনশীল ঘোষণা না, একটি গ্লোবাল পরিবর্তনশীল আপনার জন্য ঘোষণা করা হয়। এটি নতুনদের জন্য প্রোগ্রামিং সহজ করে তোলে কারণ তারা তাদের মৌলিক হাউসকিপিংয়ের কয়েকটি কাজকে অবহেলা করতে পারে। কিন্তু এটি বড় প্রোগ্রামগুলির পরিচালনাকে আরো কঠিন করে তোলে এবং এটি উল্লেখযোগ্যভাবে নির্ভরযোগ্যতা হ্রাস করে। সুতরাং কঠোর মোডে, উল্লিখিত গ্লোবাল ভেরিয়েবল আর তৈরি করা হয় না। আপনি স্পষ্টভাবে আপনার ভেরিয়েবল সব ঘোষণা করা উচিত।

গ্লোবাল লিকেজ

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

নোংরা ব্যর্থতা

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

অকট্যাল

যন্ত্রগুলির মাপের একাধিক 3 টি মেশিনে মেশিন-লেভেল প্রোগ্রামিং করার সময় অষ্টাল (বা বেস 8) উপস্থাপনাটি অত্যন্ত উপকারী ছিল। সিডিসি 6600 মেইনফ্রেমের সাথে কাজ করার সময় আপনাকে অকটাল প্রয়োজন ছিল, যা 60 বিটের শব্দ আকার ছিল। আপনি octal পড়তে পারে, আপনি 20 শব্দ হিসাবে একটি শব্দ দেখতে পারে। দুই সংখ্যার অপেক্ষাকৃত কোডটি এবং 8 টি নিবন্ধকের একটি সনাক্তকারীকে প্রতিনিধিত্ব করে। মেশিন কোড থেকে উচ্চ স্তরের ভাষাগুলিতে ধীরে ধীরে রূপান্তরের সময় এটি প্রোগ্রামিং ভাষাগুলিতে অকটাল ফর্মগুলি সরবরাহ করার জন্য উপযোগী বলে মনে করা হয়।

সি-তে, অক্টলেশনের অত্যন্ত দুর্ভাগ্যজনক উপস্থাপনাটি নির্বাচন করা হয়েছে: শীর্ষস্থানীয় শূন্য। সুতরাং সিতে, 0100 মানে 64, 100 না এবং 08 একটি ত্রুটি, 8 নং। এমনকি দুর্ভাগ্যবশত, এই অনাক্রম্যতাটি জাভাস্ক্রিপ্ট সহ প্রায় সমস্ত আধুনিক ভাষার মধ্যে অনুলিপি করা হয়েছে, যেখানে এটি কেবল ত্রুটি তৈরি করতে ব্যবহৃত হয়। এটা অন্য কোন উদ্দেশ্য আছে। তাই কঠোর মোডে, octal ফর্ম আর অনুমতি দেওয়া হয়।

আরো পড়ুন

আর্গুমেন্ট ছদ্ম অ্যারে ES5 তে আরও কিছু অ্যারে-মত হয়ে যায়। কঠোর মোডে, এটি তার callee এবং caller বৈশিষ্ট্য হারায়। এটি আপনার গোপনীয় প্রেক্ষাপট ছাড়াই অবিশ্বাস্য কোডে আপনার arguments পাস করা সম্ভব করে। এছাড়াও, ফাংশন এর arguments সম্পত্তি মুছে ফেলা হয়।

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

ভবিষ্যতে জাভাস্ক্রিপ্ট সংস্করণ জন্য সংরক্ষিত শব্দ

ECMAScript 5 সংরক্ষিত শব্দগুলির একটি তালিকা যোগ করে। আপনি যদি ভেরিয়েবল বা আর্গুমেন্ট হিসাবে তাদের ব্যবহার করেন তবে কঠোর মোড একটি ত্রুটি নিক্ষেপ করবে। সংরক্ষিত শব্দগুলি হল:

implements , interface , let , package , private , protected , public , static , এবং yield

আরও পড়া


আপনি যদি গত বছরের বা তারপরে মুক্তিপ্রাপ্ত ব্রাউজারটি ব্যবহার করেন তবে এটি সম্ভবত জাভাস্ক্রিপ্ট স্ট্রিক মোডকে সমর্থন করে। ECMAScript 5 এর আগে শুধুমাত্র পুরানো ব্রাউজারগুলি বর্তমান মানকে সমর্থন করে না এটি সমর্থন করে না।

কমান্ডের চারপাশে উদ্ধৃতিগুলি নিশ্চিত করে যে কোডটি পুরোনো ব্রাউজারেও কাজ করবে (যদিও স্ট্যাটিক মোডে একটি সিনট্যাক্স ত্রুটি তৈরি করে এমন জিনিসগুলি সাধারণত পুরানো ব্রাউজারে কিছু হার্ডতে সনাক্ত করার জন্য স্ক্রিপ্টটিকে ত্রুটিযুক্ত করে তুলবে)।


আমি দৃঢ়ভাবে কঠোর মোড ব্যবহার শুরু করতে প্রত্যেক বিকাশকারী সুপারিশ। যথেষ্ট ব্রাউজার সমর্থন করে যে কঠোর মোড legitimately ত্রুটি থেকে আমাদের সংরক্ষণ করতে সাহায্য করবে আমরা এমনকি আপনার কোড ছিল জানি না।

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

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

var person = {
    name : 'xyz',
    position : 'abc',
    fullname : function () {  "use strict"; return this.name; }
};

JSLint ডগলাস ক্রকফোর্ডের লেখা একটি ডিবাগার। শুধু আপনার স্ক্রিপ্টে পেস্ট করুন, এবং এটি দ্রুত আপনার কোডের কোনও নোটিশযোগ্য সমস্যা এবং ত্রুটিগুলির জন্য স্ক্যান করবে।


এটি ECMAScript 5 এর একটি নতুন বৈশিষ্ট্য। জন রেসিগ এটির একটি সুন্দর সারসংক্ষেপ লিখেছেন।

এটি কেবলমাত্র আপনার জাভাস্ক্রিপ্ট ফাইলগুলির মধ্যে একটি স্ট্রিং (আপনার ফাইলের শীর্ষে বা ফাংশনের ভেতরে) যা এটির মত দেখাচ্ছে:

"use strict";

আপনার কোড এ এটি নির্বাণ এখন এটি একটি স্ট্রিং হিসাবে বর্তমান ব্রাউজারের সঙ্গে কোনো সমস্যা হতে পারে না। যদি আপনার কোড প্রগমা লঙ্ঘন করে তবে ভবিষ্যতে আপনার কোডের সমস্যা হতে পারে। উদাহরণস্বরূপ, যদি আপনার বর্তমানে foo = "bar" প্রথমে foo সংজ্ঞায়িত না করে, আপনার কোডটি ব্যর্থ হতে শুরু করবে ... যা আমার মতামতের একটি ভাল জিনিস।


জাভাস্ক্রিপ্ট স্ট্রিক মোড সম্পর্কে এই নিবন্ধটি আপনাকে আগ্রহ হতে পারে: জন রেসিগ - ECMAScript 5 কঠোর মোড, JSON, এবং আরো

কিছু আকর্ষণীয় অংশ উদ্ধৃত করতে:

স্টিক্ট মোড ECMAScript 5 এ একটি নতুন বৈশিষ্ট্য যা আপনাকে একটি "কঠোর" অপারেটিং প্রেক্ষাপটে একটি প্রোগ্রাম, বা একটি ফাংশন স্থাপন করার অনুমতি দেয়। এই কঠোর প্রেক্ষাপটে কিছু কর্ম গ্রহণ করা থেকে বিরত এবং আরও ব্যতিক্রম ছুড়ে।

এবং:

কঠোর মোড একটি দম্পতি উপায় আউট সাহায্য করে:

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

এছাড়াও নোট করুন যে আপনি পুরো ফাইলটিতে "কঠোর মোড" প্রয়োগ করতে পারেন ... অথবা আপনি এটি শুধুমাত্র একটি নির্দিষ্ট ফাংশনের জন্য ব্যবহার করতে পারেন (এখনও জন রেসিগের নিবন্ধ থেকে উদ্ধৃত) :

// Non-strict code...

(function(){
  "use strict";

  // Define your library strictly...
})();

// Non-strict code... 

আপনি পুরানো এবং নতুন কোড মিশ্রিত আছে, যা সহায়ক হতে পারে ;-)

সুতরাং, আমার মনে হয় এটি "use strict" আপনি পার্লে ব্যবহার করতে পারেন (তাই নাম?) : এটি আপনাকে বিরতির কারণ হতে পারে এমন আরও কিছু জিনিস সনাক্ত করে কম ত্রুটিগুলি করতে সহায়তা করে।

বর্তমানে, এটি সমস্ত প্রধান ব্রাউজার দ্বারা সমর্থিত (বার IE 9 এবং নীচে)


বিবৃতি "use strict"; ব্রাউজারকে স্ট্রিক মোড ব্যবহার করার নির্দেশ দেয়, যা জাভাস্ক্রিপ্টের একটি কম এবং নিরাপদ বৈশিষ্ট্য সেট।

বৈশিষ্ট্য তালিকা (অ-সম্পূর্ণ)

  1. গ্লোবাল ভেরিয়েবল নিষিদ্ধ। (ক্যাভারে ভেরিয়েবল নামের মধ্যে var ঘোষণা এবং টাইপস অনুপস্থিত)

  2. নীরব ব্যর্থ নিয়োগগুলি কঠোর মোডে ত্রুটি নিক্ষেপ করবে ( NaN = 5; বরাদ্দকরণ)

  3. Undeletable বৈশিষ্ট্য মুছে ফেলার প্রচেষ্টা নিক্ষেপ করা হবে ( delete Object.prototype )

  4. একটি বস্তুর আক্ষরিক সমস্ত সম্পত্তি নামগুলি অনন্য হতে হবে ( var x = {x1: "1", x1: "2"} )

  5. ফাংশন পরামিতি নাম অনন্য হতে হবে ( function sum (x, x) {...} )

  6. ফরবিডস অকটাল সিনট্যাক্স ( var x = 023; কিছু devs wrongly অনুমান করে যে পূর্ববর্তী শূন্য সংখ্যা পরিবর্তন করতে কিছুই করে না।)

  7. শব্দ with ফোর্বস

  8. কঠোর মোডে eval নতুন ভেরিয়েবল পরিচয় করিয়ে না

  9. ফ্লোবিড প্লেইন নাম মুছে ফেলা ( delete x; )

  10. কোন ফর্মের নামগুলি eval এবং arguments বাধ্যবাধকতা বা বরাদ্দকরণের জন্য eval

  11. কঠোর মোড আনুষ্ঠানিক পরামিতি সঙ্গে arguments বস্তুর উপনাম বৈশিষ্ট্য না। (অর্থাৎ function sum (a,b) { return arguments[0] + b;} এটি কাজ করে কারণ arguments[0] a এবং আরও কিছুতেই আবদ্ধ।)

  12. arguments.callee সমর্থিত নয়

[রেফারেন্স: কঠোর মোড , মোজিলা ডেভেলপার নেটওয়ার্ক ]


সাবধানতার একটি শব্দ, আপনি হার্ড-চার্জিং প্রোগ্রামারদের: বিদ্যমান কোডে "use strict" প্রয়োগ করা বিপজ্জনক হতে পারে! এই জিনিসটা কিছুটা ভাল-সুখী, মুখোমুখি স্টিকার নয় যা আপনাকে 'ভাল' করতে কোডটিতে চাপ দিতে পারে। "use strict" প্রগমা দিয়ে, ব্রাউজারটি হঠাৎ করে এলোমেলো জায়গায় ব্যতিক্রমগুলি হ্রাস পাবে যা এটি আগে কখনও ছুঁড়ে ফেলেনি কারণ সেই স্থানে আপনি ডিফল্ট / আলিঙ্গন জাভাস্ক্রিপ্টটি আনন্দের সাথে অনুমতি দেয় তবে কঠোরভাবে জাভাস্ক্রিপ্ট অ্যাবোর্স করে! আপনার কোডে কদাচিৎ ব্যবহৃত কলগুলির মধ্যে লুকানো কঠোরতা লঙ্ঘন থাকতে পারে যা আপনার অবদান গ্রাহকদের ব্যবহার করার পরিবেশের পরিবেশে কেবল তখনই ব্যতিক্রম হয়ে যাবে যখন এটি শেষ হয়ে যাবে!

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

আমি মনে করি এটি একটি মারাত্মক caged প্রাণী যদিও, "use strict" ভাল জিনিস হতে পারে, কিন্তু আপনি এটা ঠিক করতে হবে। আপনার প্রকল্পের সবুজক্ষেত্র এবং আপনি স্ক্র্যাচ থেকে শুরু করা হয় যখন কঠোর যেতে সেরা সময়। JSHint/JSLint কনফিগার করুন সমস্ত JSHint/JSLint এবং বিকল্পগুলি আপনার টিমের পেট হিসাবে শক্ত করে ক্র্যাঁকড হয়ে যাবে, ভাল নির্মাণ / পরীক্ষা / জোরালো সিস্টেম du jour Grunt+Karma+Chai মত দমন করে এবং শুধুমাত্র তখনই আপনার সমস্ত নতুন মডিউল চিহ্নিত করা শুরু করুন "use strict" । Niggly ত্রুটি এবং সতর্কতা প্রচুর নিরাময় প্রস্তুত করা। যদি JSHint/JSLint কোনও লঙ্ঘন তৈরি করে তবে এটি স্থির করতে ব্যর্থ হওয়ায় প্রত্যেকটি গুরুতরতা বুঝতে পারে।

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


W3schools থেকে উদ্ধৃতি :

"কঠোর ব্যবহার করুন" নির্দেশিকা

"কঠোর ব্যবহার করুন" নির্দেশটি JavaScript 1.8.5 (ECMAScript সংস্করণ 5) তে নতুন।

এটি একটি বিবৃতি নয়, তবে একটি আক্ষরিক অভিব্যক্তি যা জাভাস্ক্রিপ্টের পূর্ববর্তী সংস্করণগুলি উপেক্ষা করে।

"কঠোর ব্যবহার" এর উদ্দেশ্যটি নির্দেশ করে যে "কোডটি কঠোর মোডে" কার্যকর করা উচিত।

কঠোর মোড দিয়ে, আপনি উদাহরণস্বরূপ, অনির্ধারিত ভেরিয়েবলগুলি ব্যবহার করতে পারবেন না।

কেন কঠোর মোড?

কঠোর মোড এটি "নিরাপদ" জাভাস্ক্রিপ্ট লিখতে আরও সহজ করে তোলে।

কঠোর মোড পরিবর্তন পূর্বে ভুল ত্রুটি মধ্যে "খারাপ সিনট্যাক্স" গ্রহণ।

উদাহরণস্বরূপ, স্বাভাবিক জাভাস্ক্রিপ্টে, একটি পরিবর্তনশীল নাম ভুল করে একটি নতুন গ্লোবাল পরিবর্তনশীল তৈরি করে। কঠোর মোডে, এটি একটি ত্রুটি নিক্ষেপ করবে, এটি ভুলভাবে একটি বৈশ্বিক পরিবর্তনশীল তৈরি করা অসম্ভব করে তোলে।

স্বাভাবিক জাভাস্ক্রিপ্টে, একটি বিকাশকারীকে নন-রাইটেবল বৈশিষ্ট্যগুলিতে মান নির্ধারণের জন্য কোন ত্রুটি প্রতিক্রিয়া পাবেন না।

কঠোর মোডে, একটি অ-লেখার যোগ্য সম্পত্তি, কোন গর্ত-শুধুমাত্র সম্পত্তি, একটি অ বিদ্যমান সম্পত্তি, একটি অ বিদ্যমান বিদ্যমান, বা একটি অ বিদ্যমান বিদ্যমান বস্তুর কোন অ্যাসাইনমেন্ট, একটি ত্রুটি নিক্ষেপ করা হবে।

আরও জানতে http://www.w3schools.com/js/js_strict.asp পড়ুন


use strict আপনার কোডটি নিরাপদ করার একটি উপায়, কারণ আপনি বিপজ্জনক বৈশিষ্ট্যগুলি ব্যবহার করতে পারবেন না যা আপনার প্রত্যাশা অনুযায়ী কাজ করতে পারে না। এবং কোডটি আরও কঠোর করে তুলার আগেই এটি লেখার মতো ছিল।


আমার দুই সেন্ট:

কঠোর মোডের লক্ষ্যগুলির মধ্যে একটি হল সমস্যাগুলির দ্রুত ডিবাগিংয়ের অনুমতি। এটি যখন কিছু ভুল জিনিস ঘটবে তখন ব্যতিক্রমগুলি ফাঁস করে ডেভেলপারদের সহায়তা করে যা আপনার ওয়েবপৃষ্ঠার নীরব এবং অদ্ভুত আচরণ সৃষ্টি করতে পারে। যে মুহূর্তে আমরা use strict ব্যবহার করি, কোডটি ত্রুটিগুলি নিক্ষেপ করবে যা বিকাশকারীকে অগ্রিম সংশোধন করতে সহায়তা করে।

use strict ব্যবহার use strict পরে আমি শিখেছি এমন কিছু গুরুত্বপূর্ণ বিষয়:

গ্লোবাল ভেরিয়েবল ঘোষণাকে প্রতিরোধ করে:

var tree1Data = { name: 'Banana Tree',age: 100,leafCount: 100000};

function Tree(typeOfTree) {
    var age;
    var leafCount;

    age = typeOfTree.age;
    leafCount = typeOfTree.leafCount;
    nameoftree = typeOfTree.name;
};

var tree1 = new Tree(tree1Data);
console.log(window);

এখন, এই কোডটি গ্লোবাল সুযোগে nameoftree তৈরি করে যা window.nameoftree ব্যবহার করে অ্যাক্সেস করা যেতে পারে। আমরা use strict বাস্তবায়ন কোড কোড নিক্ষেপ করা হবে।

Uncaught রেফারেন্স ত্রুটি: নামoft্রি সংজ্ঞায়িত করা হয় না

Sample

বিবৃতি with নির্মূল

বিবৃতিগুলি uglify-js মত সরঞ্জাম ব্যবহার করে minified করা যাবে না। তারা deprecated এবং ভবিষ্যতে জাভাস্ক্রিপ্ট সংস্করণ থেকে মুছে ফেলা হয়।

Sample

Duplicates প্রতিরোধ করে:

যখন আমাদের সদৃশ সম্পত্তি থাকে, তখন এটি একটি ব্যতিক্রম ছুঁড়ে ফেলে

Uncaught সিনট্যাক্স ত্রুটি: বস্তু আক্ষরিক ডুপ্লিকেট ডাটা সম্পত্তি কঠোর মোডে অনুমোদিত নয়

"use strict";
var tree1Data = {
    name: 'Banana Tree',
    age: 100,
    leafCount: 100000,
    name:'Banana Tree'
};

আরো কিছু আছে তবে আমি আরও জ্ঞান অর্জন করতে হবে।


জাভাস্ক্রিপ্ট "কঠোর" মোড ECMAScript 5 এ উপস্থাপিত হয়।

  (function() {
  "use strict";
   your code...
   })();

লেখার "কঠোর ব্যবহার"; আপনার জেএস ফাইল খুব শীর্ষে কঠোর সিনট্যাক্স চেক সক্রিয়। এটা আমাদের জন্য নিম্নলিখিত কাজ করে:

(i) যদি আপনি একটি undclclared পরিবর্তনশীল বরাদ্দ করার চেষ্টা করেন তাহলে একটি ত্রুটি দেখায়

(ii) আপনাকে কী JS সিস্টেম লাইব্রেরিগুলি ওভাররাইটিং থেকে থামিয়ে দেয়

(ii) কিছু অনিরাপদ বা ত্রুটি-প্রবণ ভাষা বৈশিষ্ট্য নিষিদ্ধ করে

"কঠোর ব্যবহার করুন" এছাড়াও পৃথক ফাংশন ভিতরে কাজ করে। এটি সর্বদা "আপনার কোড কঠোর ব্যবহার অন্তর্ভুক্ত করার জন্য একটি ভাল অনুশীলন।

ব্রাউজার সামঞ্জস্যতা সমস্যা: "ব্যবহার" নির্দেশাবলী পিছনে-সামঞ্জস্যপূর্ণ হতে বোঝানো হয়। ব্রাউজারগুলি যে তাদের সমর্থন দেয় না কেবল একটি স্ট্রিং আক্ষরিক দেখতে পাবে যা আরও উল্লেখ করা হয় না। সুতরাং, তারা এটা অতিক্রম এবং চলতে হবে।


তুলনা করার জন্য ছোট উদাহরণ:

অ কঠোর মোড:

for (i of [1,2,3]) console.log(i)

// output:
// 1
// 2
// 3

কঠোর মোড:

'use strict';
for (i of [1,2,3]) console.log(i)

// output:
// Uncaught ReferenceError: i is not defined

"কঠোর ব্যবহার করুন"; একটি বীমা যে প্রোগ্রামার জাভাস্ক্রিপ্ট আলগা বা খারাপ বৈশিষ্ট্য ব্যবহার করবে না। এটি একটি নির্দেশিকা, ঠিক যেমন একজন শাসক আপনাকে সোজা রেখা তৈরি করতে সহায়তা করবে। "কঠোর ব্যবহার করুন" আপনাকে "সরাসরি কোডিং" করতে সহায়তা করবে।

যারা তাদের লাইনগুলি করার জন্য শাসকদের ব্যবহার করতে পছন্দ করে না সেগুলি সাধারণত সেই পৃষ্ঠাগুলির মধ্যে শেষ হয় যা অন্যদের কাছে তাদের কোড ডিবাগ করার জন্য জিজ্ঞাসা করে।

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

আধুনিক জাভাস্ক্রিপ্ট অনুশীলন সবসময় "কঠোর ব্যবহার করুন" উচ্চারণ করা উচিত; pragma। ইসিএমএ গ্রুপের "স্ট্রিক্ট" মোড ঐচ্ছিক করার একমাত্র কারণ হল কম অভিজ্ঞ কোডারদের জাভাস্ক্রিপ্ট অ্যাক্সেসের অনুমতি দেওয়া এবং নতুন এবং নিরাপদ কোডিং অনুশীলনের সাথে মানিয়ে নিতে সময় দিতে।


ইসিএমএসক্রিপ্ট কমিটিতে কিছু লোকের দ্বারা ভাল বক্তব্য রয়েছে: জাভাস্ক্রিপ্টে পরিবর্তন, অংশ 1: ​​ECMAScript 5 "এই সুইচটির ক্রমবর্ধমান ব্যবহার সম্পর্কে "use strict"জাভাস্ক্রিপ্ট প্রয়োগকারীরা জাভাস্ক্রিপ্টের অনেক বিপজ্জনক বৈশিষ্ট্যগুলি হঠাৎ করে প্রতিটি ওয়েবসাইট ভেঙে ছাড়ার অনুমতি দেয়। এ পৃথিবীতে.

অবশ্যই এটি এগুলির বেশিরভাগ অপব্যবহারের (সেগুলি) কী এবং ECMAScript 5 তাদের কীভাবে সংশোধন করে সে সম্পর্কেও আলোচনা করে।


ডেভেলপারদের কেন ব্যবহার করা উচিত তা প্রধান কারণ "use strict":

  1. গ্লোবাল ভেরিয়েবলের আপতিক ঘোষনা প্রতিরোধ করে । ব্যবহার "use strict()"করার varআগে ভেরিয়েবল ঘোষণা করা হবে তা নিশ্চিত করবে । উদাহরণ:

    function useStrictDemo(){
     'use strict';
     //works fine
     var a = 'No Problem';
    
     //does not work fine and throws error
     k = "problem"
    
     //even this will throw error
     someObject = {'problem': 'lot of problem'};
    }
    
  2. NB: "use strict"নির্দেশনা শুধুমাত্র একটি স্ক্রিপ্ট বা একটি ফাংশনের শুরুতে স্বীকৃত হয়।
  3. স্ট্রিং "arguments"একটি পরিবর্তনশীল হিসাবে ব্যবহার করা যাবে না:

    "use strict";
    var arguments = 3.14;    // This will cause an error
    
  4. ভেরিয়েবল হিসাবে কীওয়ার্ড ব্যবহার সীমিত করা হবে। তাদের ব্যবহার করার চেষ্টা করছেন ভুল নিক্ষেপ করা হবে।

সংক্ষেপে আপনার কোড কম ত্রুটি প্রবণ করা এবং ঘুরে আপনি ভাল কোড লিখতে হবে।

এটি সম্পর্কে আরও পড়তে আপনি এখানে উল্লেখ করতে পারেন ।


যখন যোগ করা হচ্ছে "use strict";, স্ক্রিপ্টটি কার্যকর হওয়ার আগে নিম্নলিখিত ক্ষেত্রে একটি সিনট্যাক্স ত্রুটি ফুরিয়ে যাবে :

  • ভবিষ্যতে এর নাম ECMAScript সংস্করণের জন্য বদলের , (দূরদৃষ্টি জন্য সদ্য সংরক্ষিত মূলশব্দ ব্যবহার করে এর নাম ECMAScript 6 ): implements, interface, let, package, private, protected, public, static, এবং yield

  • ব্লক ফাংশন ঘোষণা

    if(a<b){ function f(){} }
    
  • অক্টাল সিনট্যাক্স

    var n = 023;
    
  • this গ্লোবাল বস্তুর দিকে নির্দেশ করুন।

     function f() {
          "use strict";
          this.a = 1;
     };
     f(); 
    
  • একটি বস্তু আক্ষরিক মধ্যে একটি সম্পত্তি নামের জন্য একই নামের দ্বিগুণ ঘোষণা

     {a: 1, b: 3, a: 7} 
    

    এই আর ECMAScript 6 ( বাগ 1041128 ) ক্ষেত্রে হয় না ।

  • একই নাম ফাংশন সঙ্গে দুটি ফাংশন আর্গুমেন্ট ঘোষণা

    f(a, b, b){}
    
  • একটি undeclared পরিবর্তনশীল একটি মান নির্ধারণ করা হচ্ছে

    function f(x){
       "use strict";
       var a = 12;
       b = a + x*35; // error!
    }
    f();
    
  • deleteএকটি পরিবর্তনশীল নাম ব্যবহার করেdelete myVariable;

  • ব্যবহার evalবা argumentsপরিবর্তনশীল বা ফাংশন যুক্তি নাম হিসাবে

    "use strict";
    arguments++;
    var obj = { set p(arguments) { } };
    try { } catch (arguments) { }
    function arguments() { } 
    

সূত্র:


সাধারণত জাভা স্ক্রিপ্ট কঠোর নিয়ম অনুসরণ করে না তাই ভুলের সম্ভাবনা বৃদ্ধি করে। ব্যবহার করার পর "use strict", জাভা স্ক্রিপ্ট কোডটি অন্যান্য প্রোগ্রামিং ভাষা যেমন টার্মিনেটর ব্যবহার, সূচনা ইত্যাদির আগে ঘোষণার মতো নিয়মগুলির কঠোর সেট অনুসরণ করা উচিত।

যদি "use strict"ব্যবহার করা হয় তবে কোডগুলি কঠোর নিয়ম অনুসারে অনুসরণ করা উচিত যাতে ত্রুটি এবং অস্পষ্টতার সম্ভাবনা হ্রাস পায়।








use-strict