জাভা স্ক্রিপ্টে অপরিবর্তনীয়তা এত গুরুত্বপূর্ণ (বা প্রয়োজনীয়) কেন?


204

আমি বর্তমানে প্রতিক্রিয়া জেএস এবং প্রতিক্রিয়া নেটিভ ফ্রেমওয়ার্কগুলিতে কাজ করছি। আমি যখন ফেসবুকের ফ্লাক্স এবং রেডাক্স বাস্তবায়ন সম্পর্কে পড়ছিলাম তখন অর্ধপথে রাস্তায় আমি অপরিচ্ছন্নতা বা ইমিটেবল-জেএস লাইব্রেরি পেরিয়ে এসেছি ।

প্রশ্নটি হল, অপরিবর্তনীয়তা এত গুরুত্বপূর্ণ কেন? পরিবর্তনকারী বস্তুগুলিতে কী ভুল? এটি কি জিনিসগুলি সহজ করে না?

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

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



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

আমি @bozzmob এর একটি রেডাক্স পয়েন্ট সরবরাহ করেছি।
প্রেস্টি

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

এটি প্রয়োজনীয় নয়, তবে এটি কিছু দুর্দান্ত বাণিজ্য অফস দেয়। মুভিটেবাল স্টেটটি সফ্টওয়্যার হিসাবে মুভিং পার্টস যেমন হার্ডওয়্যার
ক্রিশ্চিয়ান ডুপন্ট

উত্তর:


196

আমি সম্প্রতি একই বিষয় নিয়ে গবেষণা করছি। আমি আপনার প্রশ্নের (গুলি) উত্তর দেওয়ার জন্য যথাসাধ্য চেষ্টা করব এবং আমি এ পর্যন্ত যা শিখেছি তা ভাগ করে নেওয়ার চেষ্টা করব।

প্রশ্নটি হল, অপরিবর্তনীয়তা এত গুরুত্বপূর্ণ কেন? পরিবর্তনকারী বস্তুগুলিতে কী ভুল? এটি কি জিনিসগুলি সহজ করে না?

মূলত এ বিষয়টি নেমে আসে যে অপরিবর্তনীয়তা পূর্বাভাস, কর্মক্ষমতা (পরোক্ষভাবে) বৃদ্ধি করে এবং মিউটেশন ট্র্যাকিংয়ের অনুমতি দেয়।

ভবিষ্যদ্বাণীর

মিউটেশন পরিবর্তন আড়াল করে, যা (অপ্রত্যাশিত) পার্শ্ব প্রতিক্রিয়া তৈরি করে, যা বাজে বাগের কারণ হতে পারে। যখন আপনি অপরিবর্তনীয়তা প্রয়োগ করেন আপনি নিজের অ্যাপ্লিকেশন আর্কিটেকচার এবং মানসিক মডেলটিকে সাধারণ রাখতে পারেন, যা আপনার অ্যাপ্লিকেশন সম্পর্কে যুক্তিযুক্ত করে তোলে।

কর্মক্ষমতা

অপরিবর্তনীয় অবজেক্টে মান যুক্ত করার অর্থ হ'ল নতুন মান তৈরি করা দরকার যেখানে বিদ্যমান মানগুলি অনুলিপি করা দরকার এবং নতুন মানগুলিকে নতুন অবজেক্টে যুক্ত করা দরকার যা মেমরির জন্য ব্যয় করে, অপরিবর্তনীয় অবজেক্টগুলি স্মৃতি হ্রাস করতে কাঠামোগত অংশীদারি ব্যবহার করতে পারে ওভারহেড।

সমস্ত আপডেট নতুন মানগুলি ফিরিয়ে দেয় তবে অভ্যন্তরীণ কাঠামোগুলি মেমরির ব্যবহার (এবং জিসি থ্রেশিং) হ্রাস করার জন্য ভাগ করা হয়। এর অর্থ হ'ল আপনি যদি 1000 টি উপাদান সহ কোনও ভেক্টরে সংযোজন করেন তবে এটি আসলে 1001-উপাদান দীর্ঘ নতুন ভেক্টর তৈরি করে না। সম্ভবত, অভ্যন্তরীণভাবে কেবলমাত্র কয়েকটি ছোট জিনিস বরাদ্দ করা হয়।

আপনি এই সম্পর্কে আরও পড়তে পারেন এখানে

মিউটেশন ট্র্যাকিং

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

অতিরিক্ত সম্পদ:

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

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

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

এগহেড.আইও- তে একটি দুর্দান্ত রিডাক্স কোর্স রয়েছে যেখানে রিডেক্সের লেখক ড্যান আব্রামভ এই নীতির নীচে ব্যাখ্যা করেছেন (দৃশ্যের আরও ভালভাবে ফিট করার জন্য আমি কোডটি কিছুটা পরিবর্তন করেছি):

import React from 'react';
import ReactDOM from 'react-dom';

// Reducer.
const news = (state=[], action) => {
  switch(action.type) {
    case 'ADD_NEWS_ITEM': {
      return [ ...state, action.newsItem ];
    }
    default: {
        return state;
    }
  }
};

// Store.
const createStore = (reducer) => {
  let state;
  let listeners = [];

  const subscribe = (listener) => {
    listeners.push(listener);

    return () => {
      listeners = listeners.filter(cb => cb !== listener);
    };
  };

  const getState = () => state;

  const dispatch = (action) => {
    state = reducer(state, action);
    listeners.forEach( cb => cb() );
  };

  dispatch({});

  return { subscribe, getState, dispatch };
};

// Initialize store with reducer.
const store = createStore(news);

// Component.
const News = React.createClass({
  onAddNewsItem() {
    const { newsTitle } = this.refs;

    store.dispatch({
      type: 'ADD_NEWS_ITEM',
      newsItem: { title: newsTitle.value }
    });
  },

  render() {
    const { news } = this.props;

    return (
      <div>
        <input ref="newsTitle" />
        <button onClick={ this.onAddNewsItem }>add</button>
        <ul>
          { news.map( ({ title }) => <li>{ title }</li>) }
        </ul>
      </div>
    );
  }
});

// Handler that will execute when the store dispatches.
const render = () => {
  ReactDOM.render(
    <News news={ store.getState() } />,
    document.getElementById('news')
  );
};

// Entry point.
store.subscribe(render);
render();

এছাড়াও, এই ভিডিওগুলি কীভাবে অপরিবর্তনীয়তা অর্জন করতে পারে তার আরও বিশদভাবে প্রদর্শন করে:


1
প্রতিক্রিয়াটির জন্য @naomik ধন্যবাদ! আমার উদ্দেশ্য ছিল ধারণাটি চিত্রিত করা এবং স্পষ্টভাবে দেখানো যে অবজেক্টগুলি রূপান্তরিত হচ্ছে না এবং প্রয়োজনীয়ভাবে কীভাবে এটি পুরোপুরিভাবে প্রয়োগ করা যায় তা দেখাতে হবে না। তবে আমার উদাহরণটি কিছুটা বিভ্রান্তিকর হতে পারে, আমি এটি কিছুটা আপডেট করব।
ড্যানিলাউজ

2
@bozzmob আপনাকে স্বাগতম! না এটি সঠিক নয়, আপনাকে নিজেই রিডুসারে অপরিবর্তনীয়তা প্রয়োগ করতে হবে। এর অর্থ আপনি ভিডিওগুলিতে প্রদর্শনের মতো কৌশল অনুসরণ করতে পারেন বা অপ্রয়োজনীয় লাইব্রেরি ব্যবহার করতে পারেন। আপনি এখানে এবং এখানে আরও তথ্য সন্ধান করতে পারেন ।
ড্যানিলৌজ

1
@naomik ES6 constঅপরিবর্তনীয়তা সম্পর্কে নয়। ম্যাথিয়াস ব্যেনেন্স এ সম্পর্কে একটি দুর্দান্ত ব্লগ নিবন্ধ লিখেছিলেন ।
লেয়া রোজমা

1
লিখিতটি ভাগ করে নেওয়ার জন্য @ তারবাউদকে ধন্যবাদ। আমি এটি একটি গুরুত্বপূর্ণ পার্থক্য সম্মত। ^ _ ^
আপনাকে ধন্যবাদ

4
দয়া করে এই ব্যাখ্যাটি পরিবর্তনটিকে আড়াল করে রাখুন, যা পার্শ্ব প্রতিক্রিয়া তৈরি করে (অপ্রত্যাশিত) পার্শ্ব প্রতিক্রিয়া তৈরি করে যা দুষ্টু বাগের কারণ হতে পারে you কারণ জাভাস্ক্রিপ্টের প্রসঙ্গে এটি মোটেই সত্য নয়।
পাভলে লেকিক

142

অপ্রয়োজনীয়তার একটি কনট্রারিয়ান ভিউ

টিএল / ডিআর: জাভা স্ক্রিপ্টে প্রয়োজনীয়তার চেয়ে অপরিবর্তনীয়তা হ'ল ফ্যাশন প্রবণতা। আপনি যদি প্রতিক্রিয়া ব্যবহার করে থাকেন তবে এটি রাষ্ট্র পরিচালনার ক্ষেত্রে কিছু বিভ্রান্তিকর নকশার পছন্দগুলিকে ঝরঝরে কাজ করে । তবে বেশিরভাগ অন্যান্য পরিস্থিতিতে এটি যে জটিলতার সাথে পরিচয় করিয়ে দেয় তার চেয়ে বেশি মূল্য যুক্ত করবে না, প্রকৃত ক্লায়েন্টের চাহিদা পূরণের চেয়ে পুনরায় শুরু করার জন্য আরও পরিবেশন করা হবে।

দীর্ঘ উত্তর: নীচে পড়ুন।

জাভাস্ক্রিপ্টে অপরিবর্তনীয়তা এত গুরুত্বপূর্ণ (বা প্রয়োজনীয়) কেন?

ভাল, আপনি জিজ্ঞাসা আমি খুশি!

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

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

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

পরিবর্তনকারী বস্তুগুলিতে কী ভুল?

কোনো কিছুই নেই!

প্রকৃতপক্ষে প্রোগ্রামাররা এর জন্য বস্তুগুলিকে পরিবর্তিত করে চলেছে ... যতক্ষণ না পরিবর্তনের জন্য অবজেক্ট রয়েছে। অন্য কথায় অ্যাপ্লিকেশন বিকাশের 50+ বছর

এবং কেন জটিল জিনিস? যখন আপনার আপত্তি আছে catএবং এটি মারা যায়, catপরিবর্তনটি ট্র্যাক করার জন্য আপনার কি সত্যই দ্বিতীয় দরকার ? বেশিরভাগ লোক কেবল এটি বলে cat.isDead = trueএবং এটি দিয়ে কাজ করা হবে।

(রূপান্তরকারী বস্তু) কি জিনিসগুলিকে সহজ করে না?

হ্যাঁ! .. অবশ্যই হয়!

বিশেষত জাভাস্ক্রিপ্টে, যা ব্যবহারের ক্ষেত্রে অন্য যে কোনও স্থানে রক্ষণাবেক্ষণ করা হয় (যেমন একটি ডাটাবেসে যেমন রয়েছে) এমন কিছু রাজ্যের দৃষ্টিভঙ্গির জন্য ব্যবহার করা সবচেয়ে কার্যকর।

আমার কাছে যদি কোনও নতুন নিউজ অবজেক্ট থাকে যা আপডেট করতে হয়? ... আমি এই ক্ষেত্রে কীভাবে অর্জন করব? দোকান মুছুন এবং এটি পুনরায় তৈরি? অ্যারেতে কোনও বস্তু যুক্ত করা কি কম ব্যয়বহুল ক্রিয়াকলাপ নয়?

ঠিক আছে, আপনি traditionalতিহ্যবাহী পদ্ধতির দিকে যেতে পারেন এবং Newsঅবজেক্টটি আপডেট করতে পারেন , সুতরাং সেই অবজেক্টের সাথে আপনার স্মৃতির উপস্থাপনা পরিবর্তন হয় (এবং ব্যবহারকারীর কাছে প্রদর্শিত ভিউ বা অন্য কেউ আশা করি) ...

অথবা বিকল্পভাবে ...

আপনি সেক্সি এফপি / অপরিবর্তনীয়তা পদ্ধতির চেষ্টা করতে পারেন এবং প্রতিটি historical তিহাসিক পরিবর্তন ট্র্যাকিংয়ের সাথেNews অবজেক্টটিতে আপনার পরিবর্তনগুলি যুক্ত করতে পারেন যাতে আপনি অ্যারের মাধ্যমে পুনরাবৃত্তি করতে পারেন এবং সঠিক রাষ্ট্রের উপস্থাপনাটি কী হতে হবে তা নির্ধারণ করতে পারেন (ভাই)!

আমি এখানে ঠিক কি জানার চেষ্টা করছি। দয়া করে আমাকে আলোকিত করুন :)

ফ্যাশন আসে বন্ধুকে। বিড়ালের ত্বকের বিভিন্ন উপায় রয়েছে।

আমি দুঃখিত যে আপনাকে ক্রমাগত পরিবর্তনশীল প্রোগ্রামিং প্যারাডেমগুলির সেটগুলির বিভ্রান্তি সহ্য করতে হবে। তবে ওহে, ক্লাবে স্বাগতম!

অপরিবর্তনীয়তার সাথে স্মরণ করার জন্য এখন কয়েকটি গুরুত্বপূর্ণ বিষয় এবং আপনি কেবলমাত্র নিঃসুলভ লোককেই জাগিয়ে তুলতে পারেন এমন জ্বরের তীব্রতার সাথে আপনি এগুলি ছুঁড়ে ফেলবেন।

1) বহু-থ্রেডযুক্ত পরিবেশে রেস শর্ত এড়ানোর জন্য অপ্রচলতা দুর্দান্ত

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

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

(রয়ে যে বলেন, সেখানে রয়েছে ওয়েব শ্রমিক, যা আপনি মুখ্য থ্রেডে বস্তুর সঙ্গে তুচ্ছ সম্পর্কে কোন প্রত্যাশা নেই পাবেন বিশুদ্ধ ফাংশন ব্যবহার করে একটি সুবিধা।)

2) অপরিবর্তনীয়তা (কোনওভাবে) আপনার অ্যাপ্লিকেশনটির রাজ্যের অবস্থা থেকে এড়াতে পারে।

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

অবশ্যই এর অর্থ এই নয় যে আপনি ডাটাবেসে বর্ণের পরিস্থিতি এড়াতে পারবেন , এটিকে টানতে আপনাকে সমস্ত ব্রাউজারের সমস্ত ব্যবহারকারীকে সমন্বয় করতে হবে এবং এর জন্য আপনার ওয়েবসকেটের মতো ব্যাক-এন্ড পুশ প্রযুক্তির প্রয়োজন হবে ( নীচে এটিতে আরও বেশি) যা অ্যাপ্লিকেশন চালিয়ে যাওয়া প্রত্যেককে পরিবর্তন সম্প্রচার করবে।

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

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

এই প্রসঙ্গে, জাভাস্ক্রিপ্টের সাথে অপরিবর্তনীয়তার প্রয়োজনীয়তার সামান্য কীভাবে সম্পর্ক রয়েছে এবং রিঅ্যাক্টে বর্ণের পরিস্থিতিগুলির সাথে অনেক কিছুই করা যায় তা দেখতে সহজ: যদি আপনার আবেদনে আন্তঃনির্ভর পরিবর্তনগুলি থাকে এবং কী কী বের করার সহজ উপায় না থাকে আপনার রাষ্ট্র বর্তমানে, আপনি বিভ্রান্ত হতে চলেছেন , এবং এইভাবে প্রতিটি historicalতিহাসিক পরিবর্তন ট্র্যাক করার জন্য অপরিবর্তনীয়তা ব্যবহার করার সঠিক ধারণা তৈরি করে

3) রেসের অবস্থা স্পষ্টত খারাপ।

ঠিক আছে, আপনি যদি প্রতিক্রিয়া ব্যবহার করছেন তবে সেগুলি হতে পারে। আপনি যদি অন্য কোনও কাঠামো বেছে নেন তবে সেগুলি বিরল।

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

তুমি জান. বাস্তবিকতা। তবে আরে, কে এতো যত্ন করে?

4) অপরিবর্তনীয়তা প্রতিটি রাজ্যের পরিবর্তনের উপর নজর রাখার কার্যকারিতা প্রভাব হ্রাস করতে রেফারেন্স প্রকারগুলি ব্যবহার করে।

কারণ গুরুত্ব সহকারে, আপনি যদি প্রতিবার আপনার রাষ্ট্র পরিবর্তিত হয়ে স্টাফ অনুলিপি করতে চলেছেন তবে আপনি অবশ্যই এটি সম্পর্কে স্মার্ট হন তা নিশ্চিত করে নিন।

5) অপরিচ্ছন্নতা আপনাকে স্টাফ আনড করার অনুমতি দেয়

কারণ এর .. এটি আপনার প্রোজেক্ট ম্যানেজারের এক নম্বর বৈশিষ্ট্যটি জিজ্ঞাসা করছে, তাই না?

6) অপরিবর্তনীয় রাষ্ট্রের ওয়েবসকেটের সাথে সংমিশ্রণে প্রচুর শীতল সম্ভাবনা রয়েছে

সর্বশেষে তবে সর্বনিম্ন নয়, রাজ্য ডেল্টাসের জমাটি ওয়েবসকেটের সাথে সংমিশ্রণে একটি চমত্কার জোরালো কেস তৈরি করে, যা অপরিবর্তনীয় ঘটনাগুলির প্রবাহ হিসাবে রাষ্ট্রের একটি সহজ ব্যবহারের সুযোগ দেয় ...

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

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


এখন কিছু পরামর্শের জন্য, আপনার যদি এটি গ্রহণ করা পছন্দ করা উচিত।

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

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

সংক্ষেপে, অপরিবর্তনীয়তার জন্য বলার মতো বিষয়টি হ'ল এটি আপনাকে আপনার সমবয়সীদের সাথে ফ্যাশনেবল করে তুলবে, কমপক্ষে পরবর্তী ক্রেজটি না আসা অবধি, আপনি যে বিন্দুতে এগিয়ে যেতে পেরে খুশি হবেন।


এখন স্ব-থেরাপির এই অধিবেশনটির পরে আমি এটি উল্লেখ করতে চাই যে আমি এটি আমার ব্লগে একটি নিবন্ধ হিসাবে যুক্ত করেছি => জাভাস্ক্রিপ্টে অপরিবর্তনীয়তা: একটি বিপরীত দৃশ্য । যদি আপনার দৃ strong় অনুভূতি হয় তবে আপনি নিজের বুক থেকেও নামতে চাইলে সেখানে বিনা দ্বিধায় যোগাযোগ করুন;)।


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

5
আমি দুই বছরেরও বেশি সময় ধরে ফ্লাক্স / রেডাক্সের সাথে প্রতিক্রিয়া ব্যবহার করছি এবং আমি আপনার সাথে আরও একমত হতে পারি না, দুর্দান্ত প্রতিক্রিয়া!
পাভলে লেকিক

6
আমি দৃ strongly়ভাবে সন্দেহজনক যে অপরিবর্তনীয়তা সম্পর্কিত দৃষ্টিভঙ্গি দল এবং কোডবেস আকারের সাথে খুব সুন্দরভাবে সম্পর্কিত, এবং আমি মনে করি না যে এটি মূল প্রবক্তা একটি সিলিকন ভ্যালি দৈত্য। বলা হচ্ছে, আমি শ্রদ্ধার সাথে একমত নই: অপরিবর্তনীয়তা একটি দরকারী অনুশাসন যেমন গোটো ব্যবহার না করা একটি দরকারী শৃঙ্খলা। বা ইউনিট পরীক্ষা। বা টিডিডি। বা স্থির ধরণের বিশ্লেষণ। এর অর্থ এই নয় যে আপনি এগুলি সর্বদা করেন, প্রতিবার (যদিও কিছু কিছু করেন)। আমি আরও বলব যে ইউটিলিটি হাইপ থেকে অরথোগোনাল: দরকারী / অতিশয় ও সেক্সি / বোরিংয়ের একটি ম্যাট্রিক্সে এর প্রচুর উদাহরণ রয়েছে। "hyped" !== "bad"
জারেড স্মিথ 14 ই

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

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

53

প্রশ্নটি হল, অপরিবর্তনীয়তা এত গুরুত্বপূর্ণ কেন? পরিবর্তনকারী বস্তুগুলিতে কী ভুল? এটি কি জিনিসগুলি সহজ করে না?

প্রকৃতপক্ষে, বিপরীতটি সত্য: পারস্পরিক পরিবর্তন কমপক্ষে দীর্ঘমেয়াদী জিনিসগুলিকে আরও জটিল করে তোলে। হ্যাঁ, এটি আপনার প্রারম্ভিক কোডিংটিকে আরও সহজ করে তোলে কারণ আপনি যেখানেই চান জিনিসগুলি পরিবর্তন করতে পারবেন তবে যখন আপনার প্রোগ্রামটি আরও বড় হয় এটি একটি সমস্যা হয়ে দাঁড়ায় - যদি কোনও মান পরিবর্তিত হয় তবে কী পরিবর্তন হয়েছিল?

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

সহজভাবে বলুন: আপনি যদি পরিবর্তনযোগ্য মান ব্যবহার করেন তবে এটি আপনার কোড সম্পর্কে যুক্তি দেখানো খুব সহজ করে তোলে: প্রত্যেকে আপনার ডেটার অনন্য * অনুলিপি পেয়ে যায়, সুতরাং এটি এতে ফুট করতে এবং আপনার কোডের অন্যান্য অংশগুলি ভাঙতে পারে না। কল্পনা করুন যে এটি বহু-থ্রেড পরিবেশে কাজ করা কত সহজ করে!

দ্রষ্টব্য 1: আপনি যা করছেন তার উপর নির্ভর করে অপরিবর্তনীয়তার জন্য সম্ভাব্য পারফরম্যান্স ব্যয় রয়েছে তবে ইমটুট.জেসের মতো জিনিসগুলি তারা যথাসম্ভব সর্বোত্তম করে তোলে।

দ্রষ্টব্য 2: সম্ভাব্য ইভেন্টে আপনি নিশ্চিত ছিলেন না, ইমটুটেবল.জেএস এবং ইএস 6 এর constঅর্থ খুব আলাদা জিনিস।

সাধারণ ক্ষেত্রে, আমি ঠিক অ্যারেতে যুক্ত করতে পারতাম। এই ক্ষেত্রে আমি কীভাবে অর্জন করব? দোকান মুছুন এবং এটি পুনরায় তৈরি? অ্যারেতে কোনও বস্তু যুক্ত করা কি কম ব্যয়বহুল ক্রিয়াকলাপ নয়? PS: উদাহরণটি যদি অপরিবর্তনীয়তা ব্যাখ্যা করার সঠিক উপায় না হয় তবে দয়া করে আমাকে সঠিক ব্যবহারিক উদাহরণটি কী তা জানান।

হ্যাঁ, আপনার নিউজ উদাহরণটি পুরোপুরি ভাল, এবং আপনার যুক্তিটি ঠিক সঠিক: আপনি কেবলমাত্র আপনার বিদ্যমান তালিকাটি সংশোধন করতে পারবেন না, তাই আপনাকে একটি নতুন তৈরি করতে হবে:

var originalItems = Immutable.List.of(1, 2, 3);
var newItems = originalItems.push(4, 5, 6);

1
আমি এই উত্তরটির সাথে দ্বিমত পোষণ করি না তবে এটি প্রশ্নের "অংশীদারি থেকে আমি তার ব্যবহারিক উদাহরণটি শিখতে চাই" address যে কেউ তর্ক করতে পারে যে একাধিক অঞ্চলে নিউজ শিরোনামগুলির তালিকার একক রেফারেন্স ভাল জিনিস। "আমাকে কেবলমাত্র তালিকাটি আপডেট করতে হবে এবং সংবাদ তালিকার রেফারেন্সিং সমস্ত কিছু বিনামূল্যে আপডেট হয়ে যায়" - আমি মনে করি যে এর চেয়ে ভাল উত্তর একটি সাধারণ সমস্যা গ্রহণ করবে যেমন তিনি উপস্থাপন করেছেন এবং অপরিবর্তনীয়তা ব্যবহার করে এমন একটি মূল্যবান বিকল্প প্রদর্শন করবেন।
আপনাকে ধন্যবাদ

1
উত্তরটি সহায়ক হয়েছিল বলে আমি আনন্দিত! আপনার নতুন প্রশ্নটি সম্পর্কে: সিস্টেমটি আউট-আন্দাজ করার চেষ্টা করবেন না :) এই সঠিক ক্ষেত্রে, "স্ট্রাকচারাল শেয়ারিং" নামক কোনও কিছু GC থ্র্যাশিংকে নাটকীয়ভাবে হ্রাস করে - যদি আপনার তালিকায় 10,000 টি আইটেম থাকে এবং 10 টি যোগ করেন, আমি বিশ্বাস করি অপরিবর্তনীয়। জেএস আগের কাঠামোটিকে যথাসম্ভব পুনরায় ব্যবহার করার চেষ্টা করবে। Immutable.js কে মেমরির বিষয়ে চিন্তা করতে দিন এবং সম্ভাবনাগুলি হ'ল এটি আরও ভালভাবে প্রকাশিত হবে।
টুস্ট্রস

6
Imagine how much easier this makes working in a multi-threaded environment!-> অন্যান্য ভাষার জন্য ঠিক আছে তবে একক থ্রেডযুক্ত জাভাস্ক্রিপ্টে এটি কোনও সুবিধা নয়।
স্টিভেন ডি সালাস

1
@ স্টিভেনডিসালস নোট করুন যে জাভাস্ক্রিপ্ট মূলত অ্যাসিনক্রোনাস এবং ইভেন্ট-চালিত। এটি জাতি শর্তে মোটেও প্রতিরোধী নয়।
জারেড স্মিথ

1
@ জারেডস্মিত এখনও আমার বক্তব্য রয়ে গেছে। মাল্টিথ্রেডেড পরিবেশে ডেটা দুর্নীতি এবং / অথবা রিসোর্স লকগুলি এড়াতে এফপি এবং অপ্রচলতা শক্তিশালী দরকারী দৃষ্টান্ত যা জাভাস্ক্রিপ্টে নয় তবে এর একক থ্রেডযুক্ত। যতক্ষণ না আমি জ্ঞানের পবিত্র পবিত্র নাগেটটি অনুপস্থিত না করছি তা হ'ল জাতিগত অবস্থা এড়ানোর জন্য আপনি কি আরও জটিল (এবং ধীর) কোড তৈরির জন্য প্রস্তুত কিনা তা ... যা বেশিরভাগ লোকের তুলনায় কোনও ইস্যুতে কম less মনে করি।
স্টিভেন ডি সালাস

37

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

অপরিবর্তনীয় সংগ্রহগুলির মুখোমুখি হওয়া সমস্যার মধ্যে এখন আমরা রয়েছি: মেমরি ফুলে। গিটটি যথেষ্ট স্মার্ট যেখানে আপনি প্রতিবার পরিবর্তন করার সময় কেবলমাত্র ফাইলের নতুন অনুলিপি তৈরি করবেন না, এটি কেবল ভিন্নতার উপর নজর রাখে

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

এই কৌশলটি ইন-মেমরি ডেটা স্ট্রাকচারের জন্যও যুক্তিসঙ্গতভাবে অভিনয়যোগ্য কারণ এখানে লগারিদমিক সময়ে কাজ করে এমন সুপরিচিত গাছ-অপারেশন অ্যালগরিদম রয়েছে।

আর একটি ব্যবহারের কেস: বলুন আপনি নিজের ওয়েবঅ্যাপে একটি পূর্বাবস্থায় ফিরিয়ে আনতে চান। আপনার ডেটার অপরিবর্তনীয় উপস্থাপনা সহ, এগুলি কার্যকর করা অপেক্ষাকৃত ক্ষুদ্র। তবে আপনি যদি মিউটেশনের উপর নির্ভর করেন তবে এর অর্থ আপনাকে বিশ্বের রাষ্ট্রকে ক্যাশে করা এবং পারমাণবিক আপডেট করা নিয়ে চিন্তা করতে হবে।

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


1
আমি একটি উজ্জ্বল উদাহরণ। অপরিবর্তনীয়তা সম্পর্কে আমার বোঝা এখন আরও স্পষ্ট। ধন্যবাদ জারেড আসলে, বাস্তবায়নের একটি হ'ল আনডো বোতাম: ডি এবং আপনি আমার জন্য জিনিসগুলি বেশ সহজ করে তুলেছেন।
Bozzmob

3
গিটে একটি প্যাটার্ন তৈরির অর্থ কেবল একই জিনিসটি সর্বত্র বোধগম্য নয়। গিটে আপনি আসলে সমস্ত ইতিহাস সঞ্চিত সম্পর্কে যত্নশীল এবং আপনি বিভিন্ন শাখা মার্জ করতে সক্ষম হতে চান। সম্মুখভাগে আপনি বেশিরভাগ রাজ্যের ইতিহাস সম্পর্কে চিন্তা করেন না এবং আপনার এই সমস্ত জটিলতার প্রয়োজন নেই।
স্কি

2
@ স্কি এটি কেবল জটিল কারণ এটি ডিফল্ট নয়। আমি আমার প্রকল্পগুলিতে সাধারণত মরি বা অপরিবর্তনীয় জেএস ব্যবহার করি না: আমি তৃতীয় পক্ষের ডিপোস নিতে সর্বদা দ্বিধা বোধ করি। তবে যদি এটি ডিফল্ট (একটি লা ক্লজুরস্ক্রিপ্ট) বা কমপক্ষে একটি অপ্ট-ইন নেটিভ বিকল্প ছিল, আমি এটি সর্বদা ব্যবহার করতাম, কারণ আমি যখন ক্লোজারে প্রোগ্রাম করার সময় আমি অবিলম্বে সমস্ত কিছু পরমাণুর মধ্যে স্টাফ করি না।
জারেড স্মিথ

জো আর্মস্ট্রং বলতেন পারফরম্যান্স নিয়ে চিন্তা করবেন না, কয়েক বছর অপেক্ষা করুন এবং মুরের আইন আপনার জন্য এটি যত্ন নেবে।
ximo

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

8

প্রশ্নটি হল, অপরিবর্তনীয়তা এত গুরুত্বপূর্ণ কেন? পরিবর্তনকারী বস্তুগুলিতে কী ভুল? এটি কি জিনিসগুলি সহজ করে না?

পরিবর্তন সম্পর্কে

প্রযুক্তিগত দৃষ্টিকোণ থেকে পরিবর্তনের ক্ষেত্রে কোনও কিছুই ভুল নয়। এটি দ্রুত, এটি মেমরিটি পুনরায় ব্যবহার করছে। বিকাশকারীরা শুরু থেকেই এটির ব্যবহার করে (যেমনটি আমি মনে করি)। পরিবর্তন এবং ব্যবহারের ক্ষেত্রে সমস্যা বিদ্যমান যা এই ব্যবহারটি আনতে পারে।

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

পরিবর্তনশীল মাথাব্যথা

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

পরবর্তীতে প্রায়শই পরিবর্তনের সমস্যা হ'ল দুর্নীতিগ্রস্থ অবস্থা। পরিবর্তিত অবস্থা ঘটতে পারে যখন পরিবর্তনের প্রক্রিয়া মাঝখানে ব্যর্থ হয় এবং কিছু ক্ষেত্র পরিবর্তিত হয় এবং কিছু না ঘটে।

আরও কি, পরিবর্তন সাথে এটি পরিবর্তন ট্র্যাক করা কঠিন। সাধারণ রেফারেন্স চেকটি কিছু গভীর চেক কী করা দরকার তা জানতে পার্থক্য দেখাবে না। পরিবর্তনটি পর্যবেক্ষণ করতে কিছু পর্যবেক্ষণযোগ্য নিদর্শন প্রবর্তন করা দরকার।

পরিশেষে, পরিবর্তন হ'ল বিশ্বাসের ঘাটতির কারণ। আপনি কীভাবে নিশ্চিত হতে পারেন যে কোনও কাঠামোর মান চেয়েছিল, যদি এটি পরিবর্তন করা যায়।

const car = { brand: 'Ferrari' };
doSomething(car);
console.log(car); // { brand: 'Fiat' }

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

অপরিচ্ছন্নতা মান সম্পর্কে হয়

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

মেমরির ধারকগুলির পরিবর্তে মানগুলি ব্যবহার করা নিশ্চিত করে যে প্রতিটি বস্তু নির্দিষ্ট অপরিবর্তনীয় মান উপস্থাপন করে এবং এটি ব্যবহার করা নিরাপদ।

অপরিবর্তনীয় কাঠামো মানগুলির প্রতিনিধিত্ব করছে।

আমি মিডিয়াম নিবন্ধে এই বিষয়টিতে আরও ডাইভিং করছি - https://medium.com/@macsikora/the-state-of-immutability-169d2cd11310


6

জাভা স্ক্রিপ্টে অপরিবর্তনীয়তা এত গুরুত্বপূর্ণ (বা প্রয়োজনীয়) কেন?

অপ্রচলতা বিভিন্ন প্রসঙ্গে ট্র্যাক করা যায়, তবে সর্বাধিক গুরুত্বপূর্ণ হ'ল এটি অ্যাপ্লিকেশন রাষ্ট্র এবং অ্যাপ্লিকেশন UI এর বিপরীতে।

আমি জাভাস্ক্রিপ্ট রেডাক্স প্যাটার্নটিকে খুব ট্রেন্ডি এবং আধুনিক পদ্ধতির হিসাবে বিবেচনা করব এবং কারণ আপনি এটি উল্লেখ করেছেন।

ইউআই এর জন্য আমাদের এটি অনুমানযোগ্য করে তোলা দরকার । এটা যদি ভবিষ্যদ্বাণীযোগ্য হবে UI = f(application state)

অ্যাপ্লিকেশনগুলি (জাভাস্ক্রিপ্টে) হ্রাসকারী ফাংশন ব্যবহার করে কার্যকর করা ক্রিয়াগুলির মাধ্যমে রাষ্ট্র পরিবর্তন করে ।

হ্রাসকারী ফাংশনটি কেবল অ্যাকশন এবং পুরানো অবস্থা গ্রহণ করে এবং পুরাতন অবস্থা অক্ষত রেখে নতুন রাজ্য ফিরিয়ে দেয়।

new state  = r(current state, action)

এখানে চিত্র বর্ণনা লিখুন

সুবিধাটি হ'ল: আপনি সমস্ত রাজ্যগুলিকে সংরক্ষণের সময় থেকে রাজ্যগুলিকে সময় ভ্রমণ করেন এবং যেহেতু আপনি কোনও রাজ্যে অ্যাপ্লিকেশন সরবরাহ করতে পারেন UI = f(state)

সুতরাং আপনি সহজেই পূর্বাবস্থা / পূর্বাবস্থায় ফিরে আসতে পারেন।


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


5

জাভাস্ক্রিপ্টে অপরিবর্তনীয়তার আরেকটি সুবিধা হ'ল এটি টেম্পোরাল কাপলিং হ্রাস করে, যা সাধারণত ডিজাইনের জন্য যথেষ্ট সুবিধা দেয়। দুটি পদ্ধতির সাথে কোনও বস্তুর ইন্টারফেস বিবেচনা করুন:

class Foo {

      baz() {
          // .... 
      }

      bar() {
          // ....
      }

}

const f = new Foo();

এটি এমন পরিস্থিতিতে হতে পারে যে কলটি সঠিকভাবে কাজ baz()করার জন্য কোনও বৈধ অবস্থায় অবজেক্টটি পাওয়ার জন্য কল করতে bar()হবে। তবে আপনি কীভাবে জানেন?

f.baz();
f.bar(); // this is ok

f.bar();
f.baz(); // this blows up

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

যদি পরিবর্তনযোগ্য Fooহয় তবে এটি আর সমস্যা নয়। অনুমান করা নিরাপদ যে আমরা কল করতে পারি bazবা barযে কোনও ক্রমে, কারণ শ্রেণীর অভ্যন্তরীণ অবস্থা পরিবর্তন করতে পারে না।


4

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

আমি একটি ছোট উদাহরণ দিতে পারেন। __attribute__((pure))জিসিসিতে একটি বৈশিষ্ট্য রয়েছে। সংকলকরা আপনার কার্যটি খাঁটি কিনা তা সমাধান করার চেষ্টা করে যদি আপনি এটি বিশেষভাবে ঘোষণা করেন না lear আপনার ফাংশন খাঁটি হতে পারে এমনকি আপনার রাষ্ট্রটি পরিবর্তনযোগ্যও। অপরিবর্তনীয়তা আপনার কার্যকারিতা খাঁটি হবে এই গ্যারান্টি দেওয়ার 100+ উপায়গুলির মধ্যে একটি। আসলে আপনার 95% ফাংশন খাঁটি হবে।

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

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


3 য় অনুচ্ছেদটি এতটা অর্থবোধ করে। এটার জন্য ধন্যবাদ. 'আপনি যদি কিছু রাজ্য "পূর্বাবস্থাপন" করতে চান তবে আপনি লেনদেন তৈরি করতে পারেন' !!
বোজমবব

মার্কসবাদের সাথে তুলনাটি ওওপি-র জন্যও করা যেতে পারে। জাভা মনে আছে? হেক, জাভাস্ক্রিপ্টে জাভার বিজোড় বিট? হাইপ কখনই ভাল হয় না, এটি র‌্যাডিকালাইজেশন এবং মেরুকরণের কারণ। Orতিহাসিকভাবে, ফেসবুকের রেডাক্সের হাইপিংয়ের চেয়ে ওওপি অনেক বেশি হাইপাইড ছিল। যদিও তারা নিশ্চিতভাবে তাদের যথাসাধ্য চেষ্টা করেছে।
ximo

4

আলাদা আলাদা ...

আমার অন্য উত্তরটি প্রশ্নটিকে খুব ব্যবহারিক দৃষ্টিকোণ থেকে সম্বোধন করে এবং আমি এখনও এটি পছন্দ করি। আমি এটিকে যুক্ত করার পরিবর্তে এটি অন্য উত্তর হিসাবে যুক্ত করার সিদ্ধান্ত নিয়েছি কারণ এটি একটি বিরক্তিকর দার্শনিক কৌতুক যা আশাবাদী এই প্রশ্নেরও উত্তর দেয়, তবে আমার বিদ্যমান উত্তরটির সাথে সত্যই ফিট করে না।

টি এল; ডিআর

এমনকি ছোট প্রকল্পগুলিতে অপরিবর্তনশীলতা কার্যকর হতে পারে তবে এটি ধরে নিবেন না কারণ এটি বিদ্যমান কারণ এটি আপনার জন্য।

অনেক, অনেক দীর্ঘ উত্তর

দ্রষ্টব্য: এই উত্তরের উদ্দেশ্যে আমি 'শৃঙ্খলা' শব্দটি কিছু উপকারের জন্য আত্ম-অস্বীকার বোঝাতে ব্যবহার করছি।

এটি অন্য প্রশ্নের মতো আকারে: "আমি কি টাইপস্ক্রিপ্ট ব্যবহার করব? জাভাস্ক্রিপ্টে প্রকারগুলি এত গুরুত্বপূর্ণ কেন?"। এরও একই রকম উত্তর রয়েছে। নিম্নলিখিত পরিস্থিতিতে বিবেচনা করুন:

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

সুতরাং এখন আপনার কাছে একটি পছন্দ আছে, আপনি কি টাইপস্ক্রিপ্টে চলে যান?

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

প্রশ্নে ফিরে, উপরোক্ত অনুচ্ছেদের প্রসঙ্গে পুনঃপ্রকাশিত: এটি কি কি মূল্যবান? ?

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

পরিস্থিতি বি:

আপনি চাকরী পরিবর্তন করেন এবং এখন ফু কর্পের এক লাইন অফ বিজনেস প্রোগ্রামার You're , পলিফিলের একটি স্যুট, বিভিন্ন প্লাগইন, একটি রাজ্য পরিচালন ব্যবস্থা, ~ 20 তৃতীয় পক্ষের গ্রন্থাগারগুলি, ~ 10 অভ্যন্তরীণ গ্রন্থাগারগুলি, ইন-হাউস স্টাইল গাইড ইত্যাদির বিধি সহ একটি লিটারের মতো সম্পাদক প্লাগইন ইত্যাদি etc.

আপনি যখন 5k এলওসি লোক / মেয়ে ছিলেন তখন ফিরে আসার বিষয়টি এতটা গুরুত্বপূর্ণ নয়। এমনকি ডকুমেন্টেশনও এত বড় চুক্তি ছিল না , এমনকি 6 মাস পরে কোডের একটি নির্দিষ্ট অংশে ফিরে এসে আপনি সহজেই এটি যথেষ্ট পরিমাণে খুঁজে বের করতে পারেন। তবে এখন শৃঙ্খলা কেবল সুন্দর নয় তবে প্রয়োজনীয় । যে শৃঙ্খলা টাইপ করা বিষয় জড়িত না হতে পারে, কিন্তু হবে সম্ভবত পাশাপাশি সব স্ট্যাটিক বিশ্লেষণ কিছু ফর্ম কোডিং শৃঙ্খলা (ডকুমেন্টেশন, শৈলী গাইড, বিল্ড স্ক্রিপ্ট, রিগ্রেশন টেস্টিং, ci) অন্যান্য ধরনের জড়িত। শৃঙ্খলা আর বিলাসিতা নয় , এটি একটি প্রয়োজনীয়তা

GOTOএগুলির সবগুলিই ১৯8৮ সালে প্রয়োগ হয়েছিল : সিতে আপনার ডিঙ্কি সামান্য ব্ল্যাকজ্যাক গেমটি GOTOএস এবং স্প্যাগেটি যুক্তি ব্যবহার করতে পারে এবং এটির মাধ্যমে আপনার নিজস্ব-অ্যাডভেঞ্চারটি বেছে নেওয়া আপনার পক্ষে বড় কাজ ছিল না, তবে প্রোগ্রামগুলি আরও বড় হয়ে ওঠে এবং আরও উচ্চাভিলাষী, ভাল, অপ্রচলিত ব্যবহার GOTOটিকিয়ে রাখা যায়নি। এবং এগুলি সবই আজ অপরিবর্তনীয়তার জন্য প্রযোজ্য।

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

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


1
+1 আমি এটি পছন্দ করি। পয়েন্ট জারেডে আরও অনেক কিছু। এবং তবুও অপরিবর্তনীয়তা একটি দলকে তার নিজস্ব শৃঙ্খলার অভাব থেকে রক্ষা করবে না। 😉
স্টিভেন ডি সালাস

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

0

আমি পরিবর্তনীয় (বা অপরিবর্তনীয়) রাষ্ট্রের জন্য একটি কাঠামো অজিনোস্টিক ওপেন সোর্স (এমআইটি) লাইব তৈরি করেছি যা এই সমস্ত অপরিবর্তনীয় স্টোরেজ যেমন ল্যাব (রিডেক্স, ভয়েস ইত্যাদি ...) প্রতিস্থাপন করতে পারে।

অপরিবর্তনীয় রাজ্যগুলি আমার পক্ষে কুরুচিপূর্ণ ছিল কারণ অনেক বেশি কাজ করার ছিল (সরল পাঠ / লেখার ক্রিয়াকলাপের জন্য প্রচুর ক্রিয়া), কোড কম পঠনযোগ্য ছিল এবং বড় ডেটাসেটগুলির জন্য পারফরম্যান্স গ্রহণযোগ্য ছিল না (পুরো উপাদান পুনরায় রেন্ডার: /)।

সঙ্গে গভীর রাষ্ট্রীয় পর্যবেক্ষক আমি ডট স্বরলিপি এবং ব্যবহার ওয়াইল্ডকার্ড সঙ্গে শুধুমাত্র এক নোড আপডেট করতে পারেন। আমি রাজ্যের ইতিহাসও তৈরি করতে পারি (পূর্বাবস্থায় / পুনরায় / সময় ভ্রমণ) কেবল সেই কংক্রিট মানগুলিই বদলে রাখা হয়েছে {path:value}= কম স্মৃতির ব্যবহার।

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


-1

আমি মনে করি মূল কারণ প্রো অপরিবর্তনীয় বস্তু, অবজেক্টের অবস্থা বৈধ রাখছে।

মনে করুন আমাদের কাছে একটি বস্তু বলা হয়েছে arr। এই আইটেমটি বৈধ যখন সমস্ত আইটেম একই অক্ষর হয়।

// this function will change the letter in all the array
function fillWithZ(arr) {
    for (var i = 0; i < arr.length; ++i) {
        if (i === 4) // rare condition
            return arr; // some error here

        arr[i] = "Z";
    }

    return arr;
}

console.log(fillWithZ(["A","A","A"])) // ok, valid state
console.log(fillWithZ(["A","A","A","A","A","A"])) // bad, invalid state

যদি arrএকটি অপরিবর্তনীয় বস্তু হয়ে যায়, তবে আমরা নিশ্চিত হয়ে যাব যে সবসময় একটি বৈধ অবস্থায় থাকে।


আমার মনে হয় arrআপনি যতবার কল করবেন প্রতিবার পরিবর্তিত হয়ে fillWithZ
উঠবেন

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