স্কালায় ব্যক্তিগত এবং সুরক্ষিত নির্মাণকারী


109

আমি স্কালায় সুস্পষ্ট প্রাথমিক নির্মাতা না থাকার প্রভাব সম্পর্কে কৌতূহলী হয়েছি, কেবল শ্রেণীর বডিগুলির বিষয়বস্তু।

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

আমি কি ভূল? যদি তা হয় তবে এটি কীভাবে হয়?


আপনার কাছে একটি স্কালা সিঙ্গলটন থাকতে পারে (বস্তুর কীওয়ার্ড সহ, এটি) এবং আপনার ক্লাসটি সেই সিঙ্গলটনের মধ্যে ব্যক্তিগত হিসাবে সংজ্ঞায়িত করতে পারেন এবং আপনার অবজেক্টগুলি তৈরির জন্য সিঙ্গলটনের পদ্ধতি থাকতে পারে।
প্যাগাগাস

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

স্ক্যালাজ উত্স কোড জুড়ে এটি বেশ প্রফুল্লভাবে করা হয়। ধারণাটি একটি বিমূর্ত বীজগণিত ডেটা টাইপ হিসাবেও পরিচিত ।
টনি মরিস

উত্তর:


190

আপনি ক্লাসের নাম এবং প্যারামিটার তালিকার মধ্যে যথাযথ কীওয়ার্ড byুকিয়ে ডিফল্ট কনস্ট্রাক্টরটিকে ব্যক্তিগত / সুরক্ষিত হিসাবে ঘোষণা করতে পারেন:

class Foo private () { 
  /* class body goes here... */
}

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

আমি কেবল "প্রোগ্রামিং স্কালার" নির্মাতাদের ব্যাখ্যা (পৃষ্ঠা ৯২-৯৯) এর উপর নজর রেখেছি এবং সেখানে এটি উল্লেখ করা দেখতে পাচ্ছি না। আমি আসলে আপনার প্রশ্নের উত্তরটি একটি পুরানো চেঞ্জলগে পেয়েছি, তবে এর আগে অন্য কোথাও উল্লেখ কখনও দেখিনি। লিংক: স্কেলা-lang.org/node/43#2.4.0
আলেকসান্দার

18
"স্কালায় ইন প্রোগ্রামিং" এর 414 পৃষ্ঠা। ও্যাম্পলারের প্রোগ্রামিং স্কেলার পৃষ্ঠা 97। সুব্রামণিয়ামের প্রোগ্রামিং স্কালার পৃষ্ঠা 60। এটি পরীক্ষা করে দেখার জন্য এখনই আমার কাছে বিগনিং স্কালার একটি পিডিএফ নেই।
ড্যানিয়েল সি সোব্রাল

ওহ, আমি এটি এখন পৃষ্ঠা 97 এ দেখছি Thanks ধন্যবাদ
আলেকসান্দার কেমেটেক

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

64

আলেকসানারের উত্তর সঠিক, তবে স্কালায় প্রোগ্রামিং একটি অতিরিক্ত বিকল্প প্রস্তাব করে:

sealed trait Foo {
 // interface
}

object Foo {
  def apply(...): Foo = // public constructor

  private class FooImpl(...) extends Foo { ... } // real class
}

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

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

7
এটি কোথাও উল্লেখ করা উচিত যে এই পদ্ধতির অর্থ newকীওয়ার্ডটি ব্যবহার না করা ।
ট্র্যাভিস পার্কগুলি

1
এই পদ্ধতির সাথে একটি সতর্কতাই হ'ল যে কেউ নিজের প্রয়োগের মাধ্যমে কোনও ফু কে তাত্পর্যপূর্ণ করতে পারে। নির্মাণ নিয়ন্ত্রণের কারণের উপর নির্ভর করে এটি কোনও সুবিধা বা অসুবিধা হিসাবে দেখা যেতে পারে।
এআইজ

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