সম্প্রতি, আমি হাস্কেল শিখতে শুরু করলাম কারণ আমি ফাংশনাল প্রোগ্রামিংয়ের উপর আমার জ্ঞানকে আরও প্রসারিত করতে চেয়েছিলাম এবং আমাকে অবশ্যই বলতে হবে যে আমি এখনও পর্যন্ত এটি সত্যই ভালবাসি। আমি বর্তমানে যে সংস্থানটি ব্যবহার করছি তা হ'ল বহুবচনের উপর 'হাস্কেল ফান্ডামেন্টাল পার্ট 1' কোর্স। দুর্ভাগ্যক্রমে আমি নীচের কোড সম্পর্কে প্রভাষকের একটি বিশেষ উদ্ধৃতি বুঝতে কিছু অসুবিধা পেয়েছি এবং আশা করছি যে আপনি ছেলেরা এই বিষয়ে কিছুটা আলোকপাত করতে পারে।
সংযুক্ত কোড
helloWorld :: IO ()
helloWorld = putStrLn "Hello World"
main :: IO ()
main = do
helloWorld
helloWorld
helloWorld
উদ্ধৃতি
ডু-ব্লকে আপনার যদি একই আইও অ্যাকশন একাধিকবার হয়, তবে এটি একাধিকবার চালানো হবে। সুতরাং এই প্রোগ্রামটি তিনবার 'হ্যালো ওয়ার্ল্ড' স্ট্রিংটি প্রিন্ট করে। এই উদাহরণটি চিত্রিত করতে সহায়তা putStrLnকরে যা পার্শ্ব প্রতিক্রিয়াযুক্ত কোনও ফাংশন নয়। ভেরিয়েবল putStrLnসংজ্ঞায়িত করার জন্য আমরা ফাংশনটি একবার কল করি helloWorld। যদি putStrLnস্ট্রিং মুদ্রণ একটি পার্শ্ব প্রভাব ফেলেছে, এটি শুধুমাত্র একবার প্রিন্ট হবে এবং helloWorldপরিবর্তনশীল প্রধান করণীয়-ব্লক পুনরাবৃত্তি কোনো প্রভাব নেই।
অন্যান্য বেশিরভাগ প্রোগ্রামিং ভাষায়, এই জাতীয় প্রোগ্রামটি কেবল একবার 'হ্যালো ওয়ার্ল্ড' প্রিন্ট করবে, যেহেতু putStrLnফাংশনটি যখন ডাকা হত তখন মুদ্রণটি ঘটত । এই সূক্ষ্ম পার্থক্যটি প্রায়শই প্রাথমিকভাবে যাত্রীদের যাত্রা শুরু করে, তাই এটি সম্পর্কে কিছুটা চিন্তা করুন এবং নিশ্চিত করুন যে আপনি এই প্রোগ্রামটি কেন 'হ্যালো ওয়ার্ল্ড' তিনবার মুদ্রণ করেন এবং যদি putStrLnফাংশনটি পার্শ্ব প্রতিক্রিয়া হিসাবে মুদ্রণটি করে তবে এটি কেন একবার মুদ্রণ করবে ।
আমি কি বুঝতে পারি না
আমার কাছে এটি প্রায় স্বাভাবিক মনে হয় যে 'হ্যালো ওয়ার্ল্ড' স্ট্রিংটি তিনবার মুদ্রিত হয়েছে। আমি helloWorldপরিবর্তনশীল (বা ফাংশন?) কে কলব্যাকের এক ধরণের হিসাবে বুঝতে পারি যা পরে অনুরোধ করা হয়। আমি যা বুঝতে পারি না তা হল, কীভাবে যদি putStrLnকোনও পার্শ্ব প্রতিক্রিয়া থাকে তবে তার ফলে স্ট্রিংটি কেবল একবার মুদ্রিত হবে। বা কেন এটি কেবলমাত্র অন্যান্য প্রোগ্রামিং ভাষায় একবার মুদ্রিত হবে।
আসুন সি # কোডে বলি, আমি অনুমান করি এটি দেখতে এটির মতো দেখাচ্ছে:
সি # (ফিডাল)
using System;
public class Program
{
public static void HelloWorld()
{
Console.WriteLine("Hello World");
}
public static void Main()
{
HelloWorld();
HelloWorld();
HelloWorld();
}
}
আমি নিশ্চিত যে আমি বেশ সাধারণ কিছু উপেক্ষা করছি বা তার পরিভাষাটির ভুল ব্যাখ্যা দিয়েছি। কোন সাহায্যের ব্যাপকভাবে প্রশংসা হবে।
সম্পাদনা করুন:
আপনার উত্তরের জন্য সবাইকে ধন্যবাদ! আপনার উত্তরগুলি আমাকে এই ধারণাগুলির আরও ভাল ধারণা পেতে সহায়তা করেছে। আমি এখনও এটি পুরোপুরি ক্লিক হয়েছে বলে মনে করি না, তবে ভবিষ্যতে আমি বিষয়টি আবার ঘুরে দেখব, ধন্যবাদ!
putStrLn এর কোনও পার্শ্ব প্রতিক্রিয়া নেই; এটি কেবল কোনও আইও ক্রিয়া প্রদান করে, আপনি যতবার কল করুন না কেন যুক্তির জন্য একই আইও ক্রিয়া । "Hello World"putStrLn
helloworldতবে এমন কোনও ক্রিয়া মুদ্রিত হবে না Hello world; এটি মুদ্রণের putStrLn পরে ফেরত মূল্য হবেHello World (যথা, ())।
helloWorld = Console.WriteLine("Hello World");। আপনি শুধু ধারণ Console.WriteLine("Hello World");মধ্যে HelloWorldফাংশন নিষ্পন্ন করা হবে সব HelloWorldপ্রার্থনা করা হয়। এখন কি করে helloWorld = putStrLn "Hello World"তোলে তা চিন্তা করুন helloWorld। এটি একটি আইও মনাদকে দেওয়া হয় যা এতে থাকে ()। একবার আপনি এটি দ্বারা বেঁধে রাখার পরে >>=কেবল এটির ক্রিয়াকলাপটি সম্পাদন করা হবে ( ()কোনও কিছু মুদ্রণ করা) এবং আপনাকে বাইন্ড অপারেটরের ডানদিকে দেবে।
helloWorldC # তে ক্ষেত্র বা চলক হিসাবে ধ্রুবক হওয়ার কথা ভাবুন । এমন কোনও পরামিতি প্রয়োগ করা হচ্ছে নাhelloWorld।