অপরিবর্তনীয় সংগ্রহে নন-মিউটেশন "অ্যাড" পদ্ধতির সেরা নাম কী?


229

ওয়াফলি শিরোনামের জন্য দুঃখিত - আমি যদি একটি সংক্ষিপ্ত শিরোনাম নিয়ে আসতে পারি তবে আমাকে প্রশ্ন জিজ্ঞাসা করতে হবে না।

ধরুন আমার একটি অপরিবর্তনীয় তালিকার প্রকার আছে। এটির একটি ক্রিয়াকলাপ রয়েছে Foo(x)যা শেষে অতিরিক্ত উপাদান হিসাবে নির্দিষ্ট যুক্তি সহ একটি নতুন অপরিবর্তনীয় তালিকা প্রদান করে। সুতরাং "হ্যালো", "অপরিবর্তনীয়", "বিশ্ব" মানের সাথে স্ট্রিংগুলির একটি তালিকা তৈরি করতে আপনি লিখতে পারেন:

var empty = new ImmutableList<string>();
var list1 = empty.Foo("Hello");
var list2 = list1.Foo("immutable");
var list3 = list2.Foo("word");

(এটি সি # কোড, এবং আপনি যদি ভাষাটি গুরুত্বপূর্ণ বলে মনে করেন তবে আমি একটি সি # পরামর্শে সর্বাধিক আগ্রহী It's এটি মূলত কোনও ভাষার প্রশ্ন নয়, তবে ভাষার বাক্যাংশটি গুরুত্বপূর্ণ হতে পারে))

গুরুত্বপূর্ণ বিষয় হ'ল বিদ্যমান তালিকাগুলি দ্বারা পরিবর্তন করা হয় নাFoo - তাই empty.Countএখনও 0 ফিরে আসবে।

শেষের ফলাফলটিতে পৌঁছানোর আর একটি (আরও মুশকিল) উপায় হ'ল:

var list = new ImmutableList<string>().Foo("Hello")
                                      .Foo("immutable")
                                      .Foo("word");

আমার প্রশ্ন: ফু এর সেরা নামটি কী?

সম্পাদনা 3 : আমি পরে প্রকাশ হিসাবে, টাইপটির নামটি সম্ভবত নাও থাকতে পারে ImmutableList<T>, যা অবস্থানটি পরিষ্কার করে। পরিবর্তে এটি কল্পনা করুন যে এটি TestSuiteএবং এটি অপরিবর্তনীয় কারণ এটির কাঠামোর পুরো অংশটি অপরিবর্তনীয় ...

(সম্পাদনা 3 শেষ)

আমি এখন পর্যন্ত যে বিকল্পগুলি নিয়ে এসেছি:

  • Add: নেট মধ্যে সাধারণ, কিন্তু মূল তালিকার রূপান্তর বোঝায়
  • Cons: আমি বিশ্বাস করি এটি কার্যকরী ভাষাগুলির স্বাভাবিক নাম তবে এ জাতীয় ভাষায় অভিজ্ঞতা নেই তাদের কাছে অর্থহীন
  • Plus: আমার এ পর্যন্ত প্রিয়, এটি আমার কাছে রূপান্তর বোঝায় না । স্পষ্টতই এটি হাস্কেলতেও ব্যবহৃত হয় তবে কিছুটা আলাদা প্রত্যাশার সাথে (একটি হাস্কেল প্রোগ্রামার এটি অন্য তালিকার একক মান যুক্ত করার পরিবর্তে দুটি তালিকা যোগ করার আশা করতে পারে)।
  • With: কিছু অন্যান্য অপরিবর্তনীয় কনভেনশনগুলির সাথে সামঞ্জস্যপূর্ণ, তবে এটির আইএমওতে যথেষ্ট "সংযোজন" নেই।
  • And: খুব বর্ণনামূলক নয়।
  • + এর জন্য অপারেটর ওভারলোড: আমি সত্যিই এটি খুব বেশি পছন্দ করি না; আমি সাধারণত মনে করি অপারেটরগুলি কেবল নিম্ন স্তরের ধরণের ক্ষেত্রে প্রয়োগ করা উচিত। আমি যদিও রাজি হতে রাজি!

আমি যে মানদণ্ডগুলি বেছে নেওয়ার জন্য ব্যবহার করছি তা হ'ল:

  • পদ্ধতি কলের ফলাফলের সঠিক ধারণা দেয় (অর্থাত এটি কোনও অতিরিক্ত উপাদান সহ আসল তালিকা)
  • এটি যতটা সম্ভব পরিষ্কার করে দেয় যে এটি বিদ্যমান তালিকাকে পরিবর্তিত করে না
  • উপরের দ্বিতীয় উদাহরণের মতো একসাথে বেঁধে রাখা যুক্তিযুক্ত মনে হয়

আমি যদি নিজেকে যথেষ্ট পরিষ্কার না করে থাকি তবে আরও বিশদে জিজ্ঞাসা করুন ...

সম্পাদনা 1: এখানে পছন্দ Plusকরার পক্ষে আমার যুক্তি Add। এই দুটি লাইন কোড বিবেচনা করুন:

list.Add(foo);
list.Plus(foo);

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

সম্পাদনা 2: যুক্ত পছন্দ না করার কারণগুলি।

বিভিন্ন উত্তর কার্যকরভাবে: "অ্যাড সহ যান That's এটি যা DateTimeকরে এবং এর Stringমতো Replaceপদ্ধতিও রয়েছে যা অপরিবর্তনীয়তা সুস্পষ্ট করে না।" আমি সম্মত - এখানে একটি নজির আছে। যাইহোক, আমি প্রচুর দেখা করেছি মানুষের কল DateTime.Addবা String.Replaceএবং পরিব্যক্তি আশা । এখানে নিউজ গ্রুপের প্রশ্নগুলি প্রচুর পরিমাণে রয়েছে (এবং সম্ভবত আশেপাশে খনন করি তবে) যার উত্তর দেওয়া হয় "আপনি এর রিটার্নের মানটিকে অগ্রাহ্য করছেন String.Replace; স্ট্রিং পরিবর্তনযোগ্য নয়, একটি নতুন স্ট্রিং ফিরে আসবে।"

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

var list = new ImmutableList<string>();
list.Add("foo");

কিছুই সম্পাদন করতে যাচ্ছে না, তবে আপনি যখন এটিকে পরিবর্তন করেন তখন এটি অনেকটাই মার্কিয়ার হয়ে যায় :

var suite = new TestSuite<string, int>();
suite.Add(x => x.Length);

দেখে মনে হচ্ছে এটি ঠিক আছে। যদিও এটি আমার কাছে ভুল পরিষ্কার করে দেয়:

var suite = new TestSuite<string, int>();
suite.Plus(x => x.Length);

এটাই হ'ল ভিক্ষা

var suite = new TestSuite<string, int>().Plus(x => x.Length);

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

আমি কেবলমাত্র অপরিবর্তনীয় তালিকার ধরণের বিষয়ে কথা বলে মূল প্রশ্নকে অতি-সরল করার জন্য ক্ষমাপ্রার্থী। সমস্ত সংগ্রহগুলি ঠিক তেমন স্ব-বর্ণনামূলক নয় ImmutableList<T>:)


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

36
একটি খালি কুকুর?
মাইকেল মায়ার্স

7
কনক্যাট / কনডোগ ... আমার জন্য কাজ করে! ;)
জিনোভিস

11
আনকাট - এটি একটি জম্বি বিড়াল হবে।
এরিক ফোর্বস

2
@ ট্র্যাপ: এটি যদিও এপিআই তরল তৈরির ক্ষেত্রে সফল হয়।
জন স্কিটি

উত্তর:


130

এরকম পরিস্থিতিতে আমি সাধারণত সাথে যাই Concat। এটি আমার কাছে সাধারণত বোঝায় যে একটি নতুন অবজেক্ট তৈরি হচ্ছে।

var p = listA.Concat(listB);
var k = listA.Concat(item);

3
এটি আমি ব্যবহার করি, কারণ এটিই সিস্টেম inলিনক.অনামযোগ্য ব্যবহার - সিদ্ধান্ত ইতিমধ্যে হয়ে গেছে। :) আমি একমাত্র ব্যক্তি হতে পারি না যিনি আইকনামারেবলের উপর কনক্যাট এক্সটেনশনের নিজস্ব ওভারলোডটি সংজ্ঞায়িত করার জন্য একক মান গ্রহণ করতে সংজ্ঞায়িত করেছেন।
ড্যানিয়েল আরউইকার

9
+1 ফ্রেমওয়ার্কের মধ্যে নামকরণের ধারাবাহিকতা বজায় রাখার জন্য এটি সঠিক উত্তর।
স্যাম হারওয়েল

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

119

আমি একটি সাধারণ কারণে কনসের সাথে যাব: এর অর্থ হল আপনি যা চাইছেন ঠিক তা-ই।

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

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

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

(সম্পূর্ণ প্রকাশ: আমি একটি লিস্প প্রোগ্রামার, সুতরাং কনস এর অর্থ কী তা আমি ইতিমধ্যে জানি))


16
ভুলে যাবেন না যে আবিষ্কারের বিষয়টি গুরুত্বপূর্ণ - যদিও আমি "টেস্টসুইট" টাইপ করি। এবং পদ্ধতির তালিকার দিকে তাকান, আমি এমন একটি পদ্ধতি দেখতে চাই যা সঠিক জিনিসটি প্রস্তাব দেয়। আমি সম্ভবত এটি যা চাই অফচেঞ্জে একটি অযৌক্তিক (আমার কাছে) নাম দেখব না।
জন স্কিটি

33
আমি যদি বিব্রত বোধ করছিলাম তবে আমি এমন একটি পদ্ধতি যুক্ত করব যা ম্যাসেজের সাথে একটি ব্যতিক্রম ছুঁড়ে ফেলবে = "একটি ইমটুটেবললিস্টে প্রেপেন্ড করতে কনস ব্যবহার করুন"। :-)
কেন

2
এটি নামটি কী তা কেন তা ব্যাখ্যা করে এবং আবেলসন এবং সুসমানের "কম্পিউটার প্রোগ্রামগুলির কাঠামো এবং ব্যাখ্যা" হিসাবে কিছু উল্লেখ করে কয়েকটি পংক্তি পড়তে কাউকে হত্যা করবে না।
জন আর স্ট্রোহম

16
Ditionতিহ্যগতভাবে, কনস শেষের চেয়ে শুরুতে যুক্ত হয়। সুতরাং এটি বর্ণিত পদ্ধতির একটি সম্ভাব্য বিভ্রান্তিমূলক নাম।
ওয়াকিটাল্কি

16
পরবর্তী পরবর্তী অ-কার্যক্ষম প্রোগ্রামারকে কেবল ক্লিক বা 3 বাঁচানোর জন্য ... en.wikedia.org/wiki/Cons "কন্সট্রাক্ট" শব্দটি থেকে "এক্স টু কনস কনভেন্ট" -এর অভিব্যক্তিটি এর সাথে একটি নতুন অবজেক্ট তৈরি করা ( কনস
এক্স

59

আসলে আমি পছন্দ করি And, বিশেষত প্রতিমা পদ্ধতিতে। খালি তালিকার জন্য যদি আপনার কাছে একটি স্থিতিশীল পঠনযোগ্য সম্পত্তি থাকে এবং সম্ভবত নির্মাতাকে ব্যক্তিগত করে তুলতে পারেন তাই আপনাকে সর্বদা খালি তালিকা থেকে বানাতে হবে I'd

var list = ImmutableList<string>.Empty.And("Hello")
                                      .And("Immutable")
                                      .And("Word");

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

এটি দেখতে আরও বেশি মনে হয় আমি কীভাবে প্রাকৃতিক ভাষায় জিনিসের একটি তালিকা তৈরির বিষয়ে ভাবব। আপনি যদি জোরে জোরে এটি পড়েন তবে এটি অ্যাড বা প্লাসের চেয়ে স্বজ্ঞাত মনে হয়। "তালিকা" হ'ল খালি তালিকা এবং "হ্যালো" এবং "অপরিবর্তনীয়" এবং "শব্দ"। যদিও আমি সম্মত হব যে এটি বিচ্ছিন্নতার চেয়ে কম পরিষ্কার।
tvanfosson

52

আমি যখনই নামকরণ নিয়ে জ্যামে থাকি তখন আমি আন্তঃবিশ্বকে ধাক্কা মারি।

thesaurus.com এটি "যুক্ত" এর জন্য প্রদান করে:

সংজ্ঞা: সংযুক্ত, বৃদ্ধি; আরও মন্তব্য করুন

প্রতিশব্দ: affix, annex, ante, সংযোজন, বৃদ্ধি, গরুর মাংস আপ, উত্সাহ, আপ আপ, চার্জ আপ, চালিয়ে যাওয়া, কিউ ইন, মাংস আউট, উত্তাপ, হাইক আপ, হিচ আপ, হুক অন, হুক আপ সহ, জ্যাক আপ, জাজ আপ, একসাথে যোগদান, প্যাড, পার্লে, পিগিগ্যাক, প্লাগ ইন, এটি pourালা, উত্তর, দৌড়, আরও বলি, স্নোবল, স্যুপ আপ, গতি বাড়ানো, স্পাইক, স্টেপ আপ, পরিপূরক, মিষ্টি, ট্যাক অন, ট্যাগ

আমি Adjoinবা আরও সহজভাবে শব্দটি পছন্দ করি Join। তুমি ঠিক তাই করছ? পদ্ধতিটি অন্যদের যোগদানের জন্যও প্রয়োগ করতে পারে ImmutableList<>


1
আমিও 'জয়েন' পছন্দ করি তবে এটি বেশিরভাগ ক্ষেত্রে আপনি যখন দুটি বস্তুতে যোগদান করেন তখন আপনি 1 দিয়ে শেষ করেন this এক্ষেত্রে আপনি যদি 2 টি অবজেক্টে যোগদান করেন তবে আপনি আসলে একটি নতুন অবজেক্ট তৈরি করছেন।
আউটলা প্রোগ্রামার

1
আমি নেট, পার্ল, পিএইচপি, এমনকি ভিবিএস স্ক্রিপ্টের কোনও ক্ষেত্রেই জানি না যেখানে মিউটেশন বোঝায়। নকশাটি এমন যে A এবং B সি তৈরিতে যোগ দেয়, যেখানে সি সর্বদা একটি নতুন সত্তা।
spoulson

আমি যোগদান পছন্দ করি, এবং আমি thesaurus.com এর সাথে সম্পূর্ণ একমত: :) কোনও নাম নিয়ে সন্দেহ থাকলে সর্বদা এটি ব্যবহার করুন।
স্কুরমেডেল

var স্যুট = নতুন টেস্টসুইট <স্ট্রিং, ইন্ট> () oin জয়েন (x => x. দৈর্ঘ্য);
স্লি গ্রিফন

3
পিগজিব্যাকের সাথে যান, ইমো। বা হুকআপের সাথে।
ক্রিস মারাস্তি-জর্জি

48

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

object.With("My new item as well");

অথবা, আপনি এর সাথে "যুক্ত" যুক্ত করুন .. :)

object.AlongWith("this new item");

+1 টি। "উইথ উইথ" এসইটিএল-তে একটি ইনফিক্স অপারেটর যা একই কাজ করে। যদি এসইটিএল এটি ব্যবহার করে তবে তা অবশ্যই ঠিক :-)
ফিনউন

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

33

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

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

অন্যান্য নাম: আপনি উল্লেখ করেছেন:

  • প্লাস: আমি ইচ্ছে করে / ধুয়ে ফেলছি। আমার পক্ষে এটি অ্যাডের চেয়ে আর কোনও মিউটিং-মিটিং অপারেশন হিসাবে আলাদা হয় না
  • সহ: ভিবিতে সমস্যা সৃষ্টি করবে (পাং উদ্দেশ্যে)
  • অপারেটর ওভারলোডিং: আবিষ্কারের বিষয়টি একটি সমস্যা হবে

বিকল্পগুলি যা আমি বিবেচনা করেছি:

  • কনক্যাট: স্ট্রিংগুলি অপরিবর্তনীয় এবং এটি ব্যবহার করুন। দুর্ভাগ্যক্রমে এটি শেষ যোগ করার জন্য কেবল সত্যই
  • কপিএড: কপি কি? সূত্র, তালিকা?
  • অ্যাডটোনিউলিস্ট: তালিকার জন্য সম্ভবত একটি ভাল। তবে সংগ্রহ, স্ট্যাক, সারি ইত্যাদির কী ...

দুর্ভাগ্যক্রমে এমন একটি শব্দ বলে মনে হচ্ছে না

  1. অবশ্যই একটি অপরিবর্তনীয় অপারেশন
  2. সংখ্যাগরিষ্ঠ ব্যবহারকারীর কাছে বোধগম্য
  3. 4 টিরও কম শব্দে উপস্থাপনযোগ্য able

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

সম্পাদনা: প্লাস সম্পাদনার প্রতিক্রিয়া

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

list.Minus(obj);

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

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

সম্পাদনা 2

সম্মত হন যে স্ট্রিং.কনক্যাট এবং ডেটটাইম দ্বারা লোকেরা অবশ্যই বিভ্রান্ত হয়েছেন d আমি বেশ কয়েকজন উজ্জ্বল প্রোগ্রামারকে এই সমস্যার মুখোমুখি হতে দেখেছি।

তবে আমি মনে করি ImmutableList একটি ভিন্ন যুক্তি। স্ট্রিং বা ডেটটাইম সম্পর্কে এমন কিছু নেই যা এটিকে কোনও প্রোগ্রামারের কাছে অপরিবর্তনীয় হিসাবে প্রতিষ্ঠিত করে। আপনার অবশ্যই সহজেই জানতে হবে যে এটি অন্য কোনও উত্সের মাধ্যমে অপরিবর্তনীয়। সুতরাং বিভ্রান্তি অপ্রত্যাশিত নয়।

ইমটুটেবললিস্টে সমস্যা নেই কারণ নামটি তার আচরণটিকে সংজ্ঞায়িত করে। আপনি তর্ক করতে পারেন যে মানুষ অপরিবর্তনীয় কী তা জানে না এবং আমিও এটি বৈধ বলে মনে করি। আমি অবশ্যই কলেজে প্রায় 2 বছর অবধি এটি জানতাম না। তবে অ্যাডের পরিবর্তে আপনি যে নামটিই বেছে নিন তা নিয়ে আপনার একই সমস্যা রয়েছে।

3 সম্পাদনা করুন: টেস্টসুয়েটের মতো ধরণের কী যা অপরিবর্তনীয় তবে শব্দটি ধারণ করে না?

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

আমি পরিবর্তে অপরিবর্তনীয় হিসাবে সনাক্তকরণযোগ্য প্রকারগুলিতে ফোকাস করার আরও মূল্যবান প্রচেষ্টা হবে বলে মনে করি। সেভাবে আপনি প্রতিটি পরিবর্তনের পদ্ধতি প্যাটার্নটি বাইরে না নিয়েই সমস্যার সমাধান করতে পারেন।

এখন আপনি কীভাবে টেস্টসুটকে অপরিবর্তনীয় হিসাবে সনাক্ত করতে পারেন? আজকের পরিবেশে আমি মনে করি কয়েকটি উপায় আছে

  1. অপরিশোধিত সহ উপসর্গ: ইমট্যুটেবল টেস্টসুইট
  2. ইম্রিটব্লিতির স্তর বর্ণনা করে এমন একটি বৈশিষ্ট্য যুক্ত করুন। এটি অবশ্যই কম আবিষ্কারযোগ্য
  3. অন্য কিছু না।

আমার অনুমান / আশা এই যে উন্নয়নের সরঞ্জামগুলি সহজেই দর্শন দ্বারা (বিভিন্ন বর্ণ, শক্তিশালী হরফ, ইত্যাদি ...) দ্বারা পরিবর্তনযোগ্য প্রকারগুলি সনাক্ত করা সহজ করে এই সমস্যাটিকে সহায়তা করা শুরু করবে। তবে আমি মনে করি যে পদ্ধতিটির সমস্ত নাম পরিবর্তন করেও এটি উত্তর।


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

@ জারেডপার: টাইপটিকে টেস্টসুইট বলা হলেও কী হবে?
জন স্কিটি

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

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

@ জন, আমি মনে করি আমি এই প্রশ্নটি কাজের জায়গায় ফেলে দেওয়ার জন্য একটি ভাল জায়গাটি জানি: :)
জারেডপাড়

27

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

উদাহরণস্বরূপ, এটি স্বজ্ঞাতভাবে স্পষ্ট যে আপনি যখন বলবেন

x = 2 + 2;

x এর ফলাফলের মান 4 নয়, 22।

একইভাবে,

var empty = new ImmutableList<string>();
var list1 = empty + "Hello";
var list2 = list1 + "immutable";
var list3 = list2 + "word";

প্রতিটি ভেরিয়েবল কী ধরে রাখছে তা পরিষ্কার করা উচিত। এটি পরিষ্কার হওয়া উচিত যে শেষ লাইনে পরিবর্তিতlist2 হয়নি , তবে পরিবর্তে এটি "শব্দ" যুক্ত করার ফলাফল নির্ধারিত হয়েছে ।list3list2

অন্যথায়, আমি কেবল ফাংশনটির নাম করব প্লাস ()।


আপনার যদি জেনেরিক তালিকা থাকে, যেখানে আপনি বৈধভাবে কোনও পূর্ণসংখ্যা (বলতে) বা অন্য কোনও সংখ্যার তালিকা যুক্ত করতে পারেন ? তারপরে + এর এই ব্যবহারটি সম্মিলনের সাথে বিরোধ করবে conflict
ফিনিউ

@ ফিনিউ: আপনার বক্তব্য আমি দেখতে পাচ্ছি না। একটি তালিকার সাহায্যে আমি সর্বদা আশা করি + এর অর্থ সংযোজন, আপনি একটি উপাদান বা অনেকগুলি যুক্ত করছেন কিনা।
দ্য টিকটিকিটি

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

"আপনি একটি উপাদান বা অনেকগুলি যুক্ত করছেন কিনা" - আপনি যদি তালিকাটিকে একক উপাদান হিসাবে যুক্ত করতে চান তবে কী হবে? যেমন, [1] + 2 = [1,2]কিন্তু [1] + [2] = [1,[2]]। আপনি যা পরামর্শ দিচ্ছেন তা হ'ল বেমানান আচরণ। এই কারণেই পাইথন আপনাকে এই ফ্যাশনে একটি উপাদান যুক্ত করতে দেয় না ।
এমপেন

ঠিক আছে, সি # এর মতো একটি স্ট্যাটিকালি টাইপ করা ভাষায় আপনি তালিকার উপাদানগুলির তালিকা কী হতে পারে তা তালিকার তালিকা বা উপাদানের তালিকা কী তা বলতে পারেন, সুতরাং তালিকা বা যুক্তিযুক্ত কোনও উপাদান যুক্ত করবেন কিনা তা আপনি সিদ্ধান্ত নিতে টাইপটি ব্যবহার করতে পারেন দুটি তালিকা।
ডাবিস ভান্ডারমির

22

যথাসম্ভব পরিষ্কার হওয়ার জন্য, আপনি ওয়ার্ডিয়ার CopyAndAdd, বা অনুরূপ কিছু নিয়ে যেতে চাইতে পারেন ।


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

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

প্রথম মন্তব্য: আমি গাছগুলি এত কম ব্যবহার করি যাতে আমার মনে হয় নি। এটি একটি ভাল পয়েন্ট।
মাইকেল মায়ার্স

পুনরায় দ্বিতীয় মন্তব্য: আমি স্বীকার করি, ব্যাজটির জন্য এটি করেছি! আমি শুধু আমার বয়স দিতে পছন্দ করি না। (আমি আসলে তোমার চেয়ে ছোট, কিন্তু আমি খেয়ালী পুরোনো টাইমার চমত্কার যদি আমি প্রয়োজন বাজাতে পারেন এবং আমি শুধুমাত্র এক যার বয়স 89. হিসেবে তালিকাভুক্ত করা হয় নই।)
মাইকেল ম্যাইইয়ার্স

অপরিবর্তনীয় গাছ যুক্তি একটি শক্তিশালী, ভাল পয়েন্ট। সুতরাং ইকুইভ্যালেন্টরিফারেন্স উইথএডেড (এক্স) এই যুক্তিটির সাথে লড়াই করবে তবে নির্বোধ, এবং অনুমান করা শক্ত sounds
দ্য ব্লাস্টঅন

21

যদি আপনি সত্যিই ভার্বোস মনে করেন তবে আমি এটিকে প্রসারিত () বা সম্ভবত এক্সটেন্ডউথ () বলব

প্রসারিত হ'ল অর্থ পরিবর্তন না করে অন্য কিছুতে যুক্ত করা। আমি মনে করি এটি সি # তে খুব প্রাসঙ্গিক পরিভাষা, যেহেতু এটি এক্সটেনশন পদ্ধতিগুলির ধারণার অনুরূপ - তারা ক্লাসে নিজেই "স্পর্শ" না করে কোনও শ্রেণিতে একটি নতুন পদ্ধতি "যুক্ত" করে।

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


1
স্টাইল্ড কিন্ডা বেস অবজেক্টে কিছু করা বোঝায়।
বিশৃঙ্খলা

18

যুক্ত (), সংযুক্ত ()

আমি অপরিবর্তনীয় বস্তুগুলির ক্রিয়াকলাপের জন্য অতীত কালটি ব্যবহার করতে চাই। এটি এই ধারণাটি পৌঁছে দেয় যে আপনি আসল বস্তুটি পরিবর্তন করছেন না এবং আপনি এটি দেখলে এটি সনাক্ত করা সহজ।

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


1
পাইথনও এই সম্মেলনটি ব্যবহার করে। যেমন অন্তর্নির্মিত ফাংশনগুলি বিপরীত () এবং সাজানো ()।
জো

18

আমি mmyers প্রস্তাবনাটি CopyAndAdd । একটি "পরিব্যক্তি" থিম সঙ্গে তাল মিলিয়ে, হয়তো তোমার সাথে যেতে পারে কুঁড়ি (অযৌন প্রজনন), বাড়ান , প্রতিলিপি , অথবা অভিব্যক্ত ? =)

সম্পাদনা: আমার জিনগত থিমটি চালিয়ে যেতে, কীভাবে প্রোক্রিয়েট সম্পর্কে বোঝানো হয় যে একটি নতুন অবজেক্ট তৈরি করা হয়েছে যা পূর্বেরটির উপর ভিত্তি করে তৈরি করা হয়েছে তবে নতুন কিছু যুক্ত হয়েছে।


14

এটি সম্ভবত একটি প্রসারিত, তবে রুবিতে এই পার্থক্যের জন্য একটি ব্যবহৃত ব্যবহৃত স্বরলিপি রয়েছে: addরূপান্তরিত হয় না; add!mutates। যদি এটি আপনার প্রকল্পে একটি বিস্তৃত সমস্যা হয় তবে আপনি এটিও করতে পারেন (অ-বর্ণানুক্রমিক অক্ষরের সাথে অগত্যা নয়, পরিবর্তিত / অ-পরিবর্তনীয় পদ্ধতিগুলি নির্দেশ করার জন্য ধারাবাহিকভাবে একটি স্বরলিপি ব্যবহার করে)।


+1 টি। এটি ভাষা দ্বারা প্রয়োগ করা হয় না, তবে একটি সম্মেলন হিসাবে সম্মত হয়। আমি এটা পছন্দ করি।
ওমা


13

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

var list = new ImmutableList<string>("Hello");
var list2 = list.Copy().With("World!");

Copyএকটি মধ্যবর্তী বস্তু ফেরত দেবে, এটি আসল তালিকার একটি মিউটেটেবল অনুলিপি। Withএকটি নতুন পরিবর্তনযোগ্য তালিকা ফিরে আসবে।

হালনাগাদ:

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

var list1 = new ImmutableList<string>("Hello");
var list2 = list1.Copy(list => list.Add("World!"));

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

public ImmutableList<T> Copy(Action<IList<T>> mutate) {
  if (mutate == null) return this;
  var list = new List<T>(this);
  mutate(list);
  return new ImmutableList<T>(list);
}

এখন ব্যবহারকারীদের দ্বারা ভুল ব্যাখ্যা দেওয়ার কোনও সম্ভাবনা নেই, তারা স্বাভাবিকভাবেই সাফল্যের গর্তে পড়ে যাবে

তবুও আরেকটি আপডেট:

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

var list1 = new ImmutableList<string>("Hello");
// rules is a specification object, that takes commands to run in the copied collection
var list2 = list1.Copy(rules => rules.Append("World!"));

এখন আপনি নিয়মের নামগুলি নিয়ে সৃজনশীল হতে পারেন এবং আপনি কেবল যে কার্যকারিতাটি Copyসমর্থন করতে চান তা প্রকাশ করতে পারেন , সম্পূর্ণ ক্ষমতাগুলি নয় IList

চেইন ব্যবহারের জন্য, আপনি একটি যুক্তিসঙ্গত নির্মাতা তৈরি করতে পারেন (যা অবশ্যই চেইন ব্যবহার করবে না):

public ImmutableList(params T[] elements) ...

...

var list = new ImmutableList<string>("Hello", "immutable", "World");

বা অন্য নির্মাত্রে একই প্রতিনিধি ব্যবহার করুন:

var list = new ImmutableList<string>(rules => 
  rules
    .Append("Hello")
    .Append("immutable")
    .Append("World")
);

এটি ধরে নিয়েছে যে rules.Appendপদ্ধতিটি ফিরে আসে this

এটি আপনার সর্বশেষ উদাহরণের সাথে দেখতে কেমন হবে:

var suite = new TestSuite<string, int>(x => x.Length);
var otherSuite = suite.Copy(rules => 
  rules
    .Append(x => Int32.Parse(x))
    .Append(x => x.GetHashCode())
);

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

এগুলি সবগুলি "প্লাস" ইত্যাদির চেয়ে আরও বেশি অনর্থক are
জন স্কিটি

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

আপনার জন্য কেবলমাত্র নামগুলিই যৌগিক নামগুলির মতো মনে হয়, যেমন কপিঅ্যান্ড অ্যাপেন্ড, অনুলিপি, এবং ইত্যাদি
জর্ডোও

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

11

কয়েকটি এলোমেলো চিন্তা:

  • ImmutableAdd ()
  • পরিশেষে ()
  • অপ্রয়োজনীয় তালিকা <টি> (অপরিবর্তনীয় তালিকা <টি> অরিজিনাল লিস্ট, টি নতুন আইটেম) কনস্ট্রাক্টর

1
ImmutableAdd এর জন্য +1; অ্যাপেন্ডে আগ্রহী নয় (স্ট্রিংবিল্ডারের মতো অনেক বেশি App
জন স্কিটি

10

সি # তে ডেটটাইম অ্যাড ব্যবহার করে। তাহলে একই নাম ব্যবহার করবেন না কেন? আপনার ক্লাসের ব্যবহারকারীরা যতক্ষণ ক্লাস বুঝতে পারবেন তা পরিবর্তনযোগ্য is


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

1
স্ট্রিংকে পরিবর্তিত করার পদ্ধতিগুলি যেমন নতুন বিকাশকারীকে বিভ্রান্ত করে তোলে। তবে শীঘ্রই পর্যাপ্ত পরিমাণে সবাই শিখবে যে "স্ট্রিংগুলি পরিবর্তনযোগ্য"
টুন্ডে

9

আমি মনে করি আপনি যে মূল জিনিসটি প্রকাশের পক্ষে কঠোর হতে চেষ্টা করছেন তা হ'ল ননমুক্তি, সুতরাং এটিতে একটি জেনারেটরি শব্দ সহ কিছু, কপিউইথ () বা ইনস্ট্যান্সপ্লাস () এর মতো কিছু something


9

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

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

সুতরাং কেবল আপনার প্রিয়, "প্লাস" এর সাথে যান।


9

প্রথমত, একটি আকর্ষণীয় শুরুর পয়েন্ট: http://en.wikedia.org/wiki/Naming_conventions_( প্রোগ্রামিং) ... বিশেষত, নীচে "আরও দেখুন" লিঙ্কগুলি দেখুন।

আমি কার্যকরভাবে সমানভাবে প্লাস বা এর পক্ষের পক্ষে।

প্লাস এবং এবং উভয়ই ব্যুৎপত্তিতে গণিত ভিত্তিক। যেমন, উভয়ই গাণিতিক ক্রিয়াকলাপ; উভয়ই এমন একটি ভাব প্রকাশ করে যা প্রাকৃতিকভাবে প্রকাশিত বাক্য হিসাবে পড়ে যা কোনও মান হিসাবে সমাধান হতে পারে, যা ফেরতের মান থাকার পদ্ধতির সাথে ফিট করে। Andঅতিরিক্ত যুক্তিযুক্ত অর্থ বহন করে, তবে দুটি শব্দই স্বজ্ঞাতভাবে তালিকাগুলিতে প্রয়োগ হয়। Addকোনও অবজেক্টের উপর সম্পাদিত ক্রিয়াকে বোঝায়, যা পদ্ধতির অপরিবর্তনীয় শব্দার্থবিদ্যার সাথে বিরোধ করে।

উভয়ই সংক্ষিপ্ত, যা অপারেশনের আদিমতার কারণে বিশেষভাবে গুরুত্বপূর্ণ। সাধারণ, প্রায়শই সম্পাদিত ক্রিয়াকলাপগুলি ছোট নামগুলির জন্য প্রাপ্য।

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


8

চেইন () বা সংযুক্তি () সম্পর্কে কীভাবে?


1
সংযুক্তি অবশ্যই পরিবর্তিত হওয়ার মতো শোনাচ্ছে। হতে পারে উইথআটাচড বুদ্ধিমান হতে পারে তবে উইথ অ্যাডেডের খুব কাছাকাছি, যা উপরে আলোচনা করা হয়েছে।
দ্য ব্লাস্টঅন

এটি মজার বিষয় যে এর সাথে কী করার চেষ্টা করা হচ্ছে তা বর্ণনা করতে "চেইনিং" কতবার উল্লেখ করা হয়েছে। (5 বার), কিন্তু প্রস্তাব হিসাবে প্রস্তাব দেওয়া হয়নি! visualthesaurus.comআমি অনুসন্ধান করার সময় এটিই প্রথম জিনিসটি প্রকাশিত হয়েছিল (কোনও সম্পর্ক নেই) concatenate
cod3monk3y

7

আমি প্লাস (এবং মাইনাস) পছন্দ করি। এগুলি সহজেই বোধগম্য এবং প্রখ্যাত অপরিবর্তনীয় প্রকার (সংখ্যা) জড়িত ক্রিয়াকলাপে সরাসরি ম্যাপ করে। 2 + 2 2 এর মান পরিবর্তন করে না, এটি একটি নতুন, সমান পরিবর্তনযোগ্য, মান প্রদান করে।

আরও কিছু সম্ভাবনা:

সংযুক্ত করান ()

ঘুস()

বর্ধিত হওয়া ()


6

কেমন সঙ্গী , mateWith , অথবা মৈথুন , যারা মেনে চলতে জন্য। প্রজনন প্রজননের ক্ষেত্রে সাধারণত স্তন্যপায়ী প্রাণহীন বলে বিবেচিত হয়।

সেখানেও ইউনিয়ন ফেলে দিতে যাচ্ছি । এসকিউএল থেকে ধার নেওয়া।


2
ইউনিয়নের জন্য +1। আমি তবে সেট সেট থেকে সরাসরি orrowণ নিয়েছি। :-)
ক্রিস্টোফার লেট

এসকিউএল সেট থিওরি থেকে এর অনেক পরিভাষা পায় না?
জেসন ডি

1
এছাড়াও ইউনিয়ন পার্থক্য বোঝায় .. আপনি যদি সদৃশগুলি অন্তত অন্তত টিএসকিউএল অন্তর্ভুক্ত করতে চান তবে আপনাকে ইউনিয়ন সমস্তটি পরিষ্কারভাবে ব্যবহার করতে হবে।
শণ

6

স্পষ্টতই আমি এই প্রশ্নের উত্তর দেওয়ার জন্য প্রথম ওবজে-সি / কোকো ব্যক্তি।

NNString *empty = [[NSString alloc] init];
NSString *list1 = [empty stringByAppendingString:@"Hello"];
NSString *list2 = [list1 stringByAppendingString:@"immutable"];
NSString *list3 = [list2 stringByAppendingString:@"word"];

এটি দিয়ে কোনও কোড গল্ফ গেম জিততে যাচ্ছে না।


+1 [object]By[Verb]ing[Object]:পদ্ধতির উপসর্গটি ইঙ্গিত দেয় যে একটি নতুন স্ট্রিং [verb][Object]:সরল বিপরীতে ফিরে আসবে , যা বস্তুটিকে স্থানে পরিবর্তিত করবে।
ডেভ দেলং

3
+1 টি। ভার্বোসিটির প্রতি লোকদের ঘৃণা (ওরফে স্ব-ডকুমেন্টেশন) আমি বুঝতে পারি না।
হাটফিনচ

5

আমার মনে হয় "অ্যাড" বা "প্লাস" ভাল লাগছে। তালিকার অপরিবর্তনীয়তা প্রকাশ করার জন্য তালিকার নাম নিজেই যথেষ্ট।


এটি কোনও তালিকা নয়, এটি একটি পরীক্ষার স্যুট।
tstenner

5

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

হয়তো আমি এই স্কিমটি ব্যবহার করব

AddToCopy
RemoveFromCopy
InsertIntoCopy

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

সম্ভবত আমি কেবল সাধারণ "যুক্ত" এবং বন্ধুদেরও ব্যবহার করব। এটি গণিতে কীভাবে ব্যবহৃত হয় তা আমি পছন্দ করি

Add 1 to 2 and you get 3

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


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

KISS - যদি নামকরণের প্রয়োগের বিবরণ অন্তর্ভুক্ত করা শুরু হয় তবে সমস্ত পদ্ধতির নাম অতিরিক্ত দীর্ঘ হয়ে যাবে। "যোগ" যথেষ্ট সহজ এবং কাজটি করে।
এমপি।

1
@ এমপি: আবার আপনি "প্রয়োগের বিবরণ" শব্দটিকে এমনভাবে ব্যবহার করেন যা আমার বিশ্বাসযোগ্য নয় uit এটি লিঙ্কযুক্ত তালিকা বা হুডের নীচে থাকা একটি অ্যারে বাস্তবায়নের বিশদ। আমি এপিআই পরিবর্তন না করে বাস্তবায়ন পরিবর্তন করতে পারি। অপরিবর্তনীয় দিক না একটি বাস্তবায়ন বিস্তারিত।
জন স্কিটি

1
ঠিক আছে। জারেডপাড়, তবে আমি মনে করি এটি আসলে গুরুত্বপূর্ণ নয় যে এটি গাছটি অনুলিপি করে বা কেবল বিদ্যমান গাছটি ব্যবহার করে এবং নতুন গাছ ফিরে আসার জন্য এটি একটি পাতা হিসাবে ব্যবহার করে। মানে, এটি কেবল একটি বাস্তবায়ন বিশদ। জাভা স্ট্রিং ক্লাসের সাবস্ট্রিং অপারেশনের জন্য (আমি বিশ্বাস করি) এটি একই।
জোহানেস স্কাউব -


5

আমি মনে করি Plus()এবং Minus()বা, অথবা, Including(), Excluding()এ যুক্তিসঙ্গত হয় implying অপরিবর্তনীয় আচরণ।

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


4

Append- কারণ, নোট করুন যে System.Stringপদ্ধতির নামগুলি প্রস্তাব দেয় যে তারা উদাহরণটি পরিবর্তিত করবে, কিন্তু তারা তা করে না।

অথবা আমি বেশ পছন্দ করি AfterAppending:

void test()
{
  Bar bar = new Bar();
  List list = bar.AfterAppending("foo");
}

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

আমি আরও বেশি সংযোজন পছন্দ করি। এটি পৃথক করে যে আপনি সংগ্রহটি পরিবর্তন করছেন না বরং এতে যোগ দিচ্ছেন।

4

list.CopyWith(element)

যেমন স্মলটাল্ক :)

এবং এটি list.copyWithout(element)কোনও উপাদানের সমস্ত উপস্থিতি সরিয়ে দেয় যা list.copyWithout(null)আনসেট উপাদানগুলিকে সরানোর জন্য ব্যবহৃত হলে সবচেয়ে কার্যকর ।


3

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


হ্যাঁ, আমি আপনার বিষয়টি দেখছি আমি মনে করি আমি এখনও প্লাস পছন্দ করি তবে এটি বিবেচনার মতো বিষয়।
জন স্কিটি

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