স্কাল পদ্ধতি ঘোষণায় সমান চিহ্নটি কখন ব্যবহার করবেন?


85

সমান চিহ্ন সহ:

object HelloWorld {
  def main(args: Array[String]) = {
    println("Hello!")
  }
}

সমান চিহ্ন ছাড়া:

object HelloWorld {
  def main(args: Array[String]) {
    println("Hello!")
  }
}

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

স্ক্যালাল পদ্ধতিতে সমান চিহ্নটি ব্যবহার করার জন্য সেরা অনুশীলন কোনটি যা কোনও মান দেয় না?

উত্তর:


109

আমি আসলে ড্যানিয়েলের সাথে বেশ দৃ strongly়ভাবে একমত নই। আমি মনে করি যে সম-সম-বিন্যাসটি কখনই ব্যবহার করা উচিত নয় । যদি আপনার পদ্ধতিটি একটি এপিআই হিসাবে প্রকাশিত হয় এবং আপনি দুর্ঘটনাক্রমে ভুল টাইপটি ফিরতে উদ্বিগ্ন হন তবে একটি স্পষ্ট প্রকারের টীকা যুক্ত করুন:

object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("Hello!")
    123
  }
}

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

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


4
আমি এই পদ্ধতির পছন্দ করি, এটি পাঠকের কাছে আরও স্পষ্ট এবং আরও স্পষ্ট।
লুকাসজ কোরজিবস্কি

4
স্পষ্টতই এখন এটি প্রস্তাবিত স্টাইল ( ডকস.স্কালা-lang.org/style/declarations.html#procedure_syntax ) তাই আমি এটিকে গ্রহণযোগ্য উত্তর হিসাবে পরিবর্তন করছি।
এস্কো লুন্তটোলা

4
আমিও তার সাথে একমত, আমি মনে করি = ছাড়া সিনট্যাক্সটি ভাষা থেকে পুরোপুরি মুছে ফেলা উচিত
আহমেদ সোলিমান ফারগাল

7
মার্টিন ওডারস্কি তার মূল বক্তব্য "স্কেল উইথ স্টাইল" তে বলেছেন যে এটি একটি historicalতিহাসিক ভুল ছিল। তাকে এই সিনট্যাক্সটি যুক্ত করতে হয়েছিল (= = ছাড়াই) যাতে তিনি জাভা বিকাশকারীদের থেকে "ইউনিট" লুকিয়ে রাখতে পারেন যাতে তারা বিভ্রান্ত না হন। ভবিষ্যতে এটি সরানো হবে বলেও উল্লেখ করেছিলেন তিনি।
তাবদুলাদি

4
সমান চিহ্নটি পদ্ধতির সংজ্ঞায় ভুলে গেলে কি ওয়ার্ন করার কোনও উপায় আছে? সংকলক বিকল্প হিসাবে, উদাহরণস্বরূপ, বা কোনও উত্স বিশ্লেষণ সরঞ্জামে?
ভ্যাসিলিনোভিকভ

42

আপডেট: স্কেলা -২.১০ অনুসারে, সমান চিহ্ন ব্যবহার করে পছন্দ করা হয়। পুরানো উত্তর:

যে পদ্ধতিগুলি ফিরে আসে সেগুলি সর্বদা অ-সমান সিনট্যাক্স ব্যবহার করা Unitউচিত । এটি API এ কার্যকর করার ক্ষেত্রে সম্ভাব্য ভুলগুলি এড়িয়ে চলে। উদাহরণস্বরূপ, আপনি দুর্ঘটনাক্রমে এরকম কিছু করতে পারতেন:

object HelloWorld {
  def main(args: Array[String]) = {
    println("Hello!")
    123
  }
}

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

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

সম্পর্কিত নোটে, বিমূর্ত পদ্ধতিগুলির জন্য একটি অনুরূপ বাক্য গঠন রয়েছে:

trait Foo {
  def bar(s: String)
}

পদ্ধতিটির barস্বাক্ষর রয়েছে String=>Unit। আপনি যখন কোনও বিমূর্ত সদস্যের উপর প্রকার টিকাটি বাদ দেন তখন স্কেলা এটি করে। আবার, এটি পরিষ্কার, এবং (আমার মনে হয়) পড়া সহজ।


4
সমতুল্য চিহ্নটি ব্যবহার না করা স্কেল স্টাইল গাইডেও
এসকো লুওনটোলা

6
আমি সেই বিটটি লিখেছিলাম, সুতরাং আপনি যখন রেফারেন্সটি ওজন করবেন তখন আপনার সম্ভবত এটি মনে রাখা উচিত। :-)
ড্যানিয়েল স্পিউয়াক

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

10
স্কাল্যাডেস 2013, মার্টিন ওডারস্কি, মূল বক্তব্য - স্টাইল অধ্যায় 45 সহ স্কেল : প্রক্রিয়া ঘোষণার (অ সমান সিনট্যাক্স) এড়ানো উচিত।
সেনিয়া

4
অফিসিয়াল স্টাইল গাইড এটি আর সুপারিশ করে না: ডকসস.স্কালা-lang.org/style/declarations.html#procedure_syntax
sbilstein

12

আপনাকে রিটার্নিং ইউনিট সংজ্ঞা ব্যতীত কল ডিক্লোরেশনে সমান সাইন ব্যবহার করতে হবে

এই পরবর্তী ক্ষেত্রে, আপনি সমান চিহ্নটি এড়িয়ে যেতে পারেন। যদিও এই সিনট্যাক্সটিকে হ্রাস করা যেতে পারে, তাই এটি এড়ানো সেরা best সমান চিহ্ন ব্যবহার করে এবং রিটার্নের ধরণটি সর্বদা কার্যকর হবে।


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

4
docs.scala-lang.org/style/tyype.html#function_values ধরণের স্টাইল গাইড যেভাবেই হোক = সব সময় ব্যবহার করে নির্দেশ করে।
বিপডগ

4

পদ্ধতিগুলির জন্য, স্কালা স্টাইল গাইড পদ্ধতি সিনট্যাক্সের বিপরীতে সমান সিনট্যাক্সের প্রস্তাব দেয়

প্রক্রিয়া সিনট্যাক্স

প্রক্রিয়া বাক্য গঠনটি এড়িয়ে চলুন, কারণ এটি বংশবৃদ্ধিতে খুব অল্প লাভের জন্য বিভ্রান্তিকর হতে থাকে।

// don't do this
def printBar(bar: Baz) {
  println(bar)
}
// write this instead
def printBar(bar: Bar): Unit = {
  println(bar)
}

0

একটি জিনিস: একটি পদ্ধতির শেষ বিবৃতিটি কল্পনা করুন যে ইউনিটটি ফিরে আসবে সে ইউনিটটি ফেরত দেয় না। সমতুল্য সিনট্যাক্সটি ব্যবহার করা তখন খুব সুবিধাজনক, আমি আশা করি এটির জন্য বেশ কয়েকটি ব্যবহারের কেস দেখতে পাওয়ায় এটি হ্রাস পাবে না I


0

সময়ের সাথে সাথে ডিফল্ট শৈলীর পরিবর্তন হয়েছে, এবং উত্তরগুলির অনেক মন্তব্যে এটি উল্লেখ করা হয়েছে, এটি ফাংশন ঘোষণার জন্য সিনট্যাক্স ব্যবহার করার জন্য অফিশিয়াল স্টাইল গাইডে প্রস্তাবিত =


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

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

0

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

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