গণিতবিদদের নিজস্ব মজার উপায় আছে, সুতরাং প্রোগ্রামাররা যেমন বলতেন "তখন আমরা ফাংশনটিকে প্যারামিটার হিসাবে 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