গণিতবিদদের নিজস্ব মজার উপায় আছে, সুতরাং প্রোগ্রামাররা যেমন বলতেন "তখন আমরা ফাংশনটিকে প্যারামিটার হিসাবে fপাস xকরার কথা বলি না" fতার পরিবর্তে তারা " তার যুক্তিতে ফাংশন প্রয়োগ করার" বিষয়ে কথা বলে x।
গণিত এবং কম্পিউটার বিজ্ঞানে, প্রয়োগ এমন একটি ফাংশন যা আর্গুমেন্টগুলিতে ফাংশন প্রয়োগ করে।
উইকিপিডিয়া
applyস্কালায় অবজেক্ট-ওরিয়েন্টড এবং ফাংশনাল দৃষ্টান্তগুলির মধ্যে ব্যবধানটি বন্ধ করার উদ্দেশ্যে কাজ করে। স্কালার প্রতিটি ফাংশন একটি অবজেক্ট হিসাবে উপস্থাপন করা যেতে পারে। প্রতিটি ফাংশনটিতে একটি ওও টাইপ থাকে: উদাহরণস্বরূপ, এমন একটি ফাংশন যা Intপরামিতি নেয় এবং একটি ফেরত Intদেয় ওও প্রকারের হবে Function1[Int,Int]।
// define a function in scala
(x:Int) => x + 1
// assign an object representing the function to a variable
val f = (x:Int) => x + 1
যেহেতু সমস্ত স্ক্যালায় একটি অবজেক্ট তাই fএখন Function1[Int,Int]অবজেক্টের রেফারেন্স হিসাবে বিবেচনা করা যেতে পারে । উদাহরণস্বরূপ, আমরা toStringউত্তরাধিকার সূত্রে প্রাপ্ত পদ্ধতিটিকে কল করতে Anyপারি, খাঁটি ফাংশনের পক্ষে এটি অসম্ভব হত, কারণ ফাংশনগুলির কোনও পদ্ধতি নেই:
f.toString
অথবা আমরা পদ্ধতিতে Function1[Int,Int]কল composeকরে fএবং দুটি পৃথক ফাংশন একসাথে শৃঙ্খলাবদ্ধ করে অন্য কোনও বস্তুর সংজ্ঞা দিতে পারি :
val f2 = f.compose((x:Int) => x - 1)
এখন যদি আমরা আসলে ফাংশনটি সম্পাদন করতে চাই, বা গণিতবিদ হিসাবে "তার যুক্তিগুলিতে কোনও ফাংশন প্রয়োগ করুন" বলে আমরা বস্তুটিতে applyপদ্ধতিটি কল করব Function1[Int,Int]:
f2.apply(2)
f.apply(args)আপনি যখনই কোনও বস্তু হিসাবে উপস্থাপিত কোনও ক্রিয়াকলাপ সম্পাদন করতে চান প্রতিটি সময় লেখার বিষয়টি অবজেক্ট-ওরিয়েন্টেড উপায়, তবে কোডের সাথে অতিরিক্ত অতিরিক্ত তথ্য যুক্ত না করে প্রচুর বিশৃঙ্খলা যুক্ত করতে পারে এবং আরও বেশি স্ট্যান্ডার্ড স্বরলিপি ব্যবহার করতে সক্ষম হতে ভাল লাগবে যেমন যেমন f(args)। স্ক্যালায়ার সংকলকটি সেখানেই পদক্ষেপ নিয়ে আসে এবং যখনই আমাদের fকোনও ফাংশন অবজেক্টের রেফারেন্স থাকে এবং f (args)উপস্থাপিত ফাংশনে যুক্তি প্রয়োগ করতে লিখি কম্পাইলারটি নিঃশব্দে f (args)অবজেক্ট পদ্ধতি কলটিতে প্রসারিত করে f.apply (args)।
স্কেলার প্রতিটি ফাংশনকে একটি অবজেক্ট হিসাবে বিবেচনা করা যেতে পারে এবং এটি অন্যভাবেও কাজ করে - প্রতিটি বস্তুকে একটি ফাংশন হিসাবে বিবেচনা করা যেতে পারে, তবে এর applyপদ্ধতি থাকলে শর্ত থাকে । এই জাতীয় জিনিসগুলি ফাংশন স্বরলিপিটিতে ব্যবহার করা যেতে পারে:
// we will be able to use this object as a function, as well as an object
object Foo {
var y = 5
def apply (x: Int) = x + y
}
Foo (1) // using Foo object in function notation
অনেকগুলি ব্যবহারের কেস রয়েছে যখন আমরা কোনও জিনিসটিকে একটি ফাংশন হিসাবে বিবেচনা করতে চাই। সর্বাধিক সাধারণ দৃশ্যটি কারখানার নিদর্শন । কোনও কারখানার পদ্ধতি ব্যবহার করে কোডটিতে বিশৃঙ্খলা যুক্ত করার পরিবর্তে আমরা applyযুক্ত শ্রেণীর একটি নতুন উদাহরণ তৈরি করতে আর্গুমেন্টের সেটকে আপত্তি জানাতে পারি :
List(1,2,3) // same as List.apply(1,2,3) but less clutter, functional notation
// the way the factory method invocation would have looked
// in other languages with OO notation - needless clutter
List.instanceOf(1,2,3)
সুতরাং applyপদ্ধতিটি স্কালায় ফাংশন এবং অবজেক্টগুলির মধ্যে ব্যবধানটি বন্ধ করার এক সহজ উপায় is