উইকিপিডিয়া বলেছে যে রুবি একটি কার্যকরী ভাষা, তবে আমি নিশ্চিত নই। কেন অথবা কেন নয়?
উইকিপিডিয়া বলেছে যে রুবি একটি কার্যকরী ভাষা, তবে আমি নিশ্চিত নই। কেন অথবা কেন নয়?
উত্তর:
আমি অবশ্যই স্পষ্টভাবে মনে করি আপনি রুবিতে কার্যকরী শৈলী ব্যবহার করতে পারেন।
ক্রিয়ামূলক শৈলীতে প্রোগ্রাম করতে সক্ষম হওয়া সবচেয়ে গুরুত্বপূর্ণ দিকগুলির মধ্যে একটি হ'ল যদি ভাষা উচ্চতর অর্ডার ফাংশনগুলি সমর্থন করে ... যা রুবি করে।
এটি বলেছিল, রুবিতে অ-কার্যকরী শৈলীতে এটি প্রোগ্রাম করা সহজ। ক্রিয়ামূলক শৈলীর আর একটি মূল বিষয় হ'ল রাষ্ট্র না থাকা এবং আসল গাণিতিক ফাংশনগুলি থাকে যা প্রদত্ত ইনপুটগুলির সেটের জন্য সর্বদা একই মান ফেরত দেয়। এটি রুবিতে করা যেতে পারে, তবে এটি হাস্কেলের মতো আরও কঠোরভাবে কার্যকর কোনও কিছুর মতো ভাষায় প্রয়োগ করা হয় না।
সুতরাং, হ্যাঁ, এটি কার্যকরী শৈলীর সমর্থন করে তবে এটি আপনাকে অ-কার্যকরী শৈলীতে প্রোগ্রাম করতে দেয়।
Is ruby a functional language?
এবং একটি সরল উত্তরে একটি সহজ নম্বর। রুবি কিছু কার্যকরী বৈশিষ্ট্য সহ একটি অবজেক্ট ওরিয়েন্টেড ভাষা।
কোনও ভাষা কার্যকরী ভাষা হয় বা না তা গুরুত্বহীন। ফাংশনাল প্রোগ্রামিং হ'ল একটি থিসিস, যা ফিলিপ ওয়েডলার (ফাংশনাল প্রোগ্রামিং এর সারাংশ) এবং জন হিউজেস (কেন ফাংশনাল প্রোগ্রামিং ম্যাটার্স) দ্বারা সর্বোত্তমভাবে ব্যাখ্যা করা হয়েছে।
একটি অর্থবহ প্রশ্নটি হ'ল, 'ফাংশনাল প্রোগ্রামিংয়ের থিসিসটি অর্জনে রুবি কীভাবে আধ্যাত্মিক?' উত্তরটি 'খুব খারাপভাবে'।
আমি সম্প্রতি এই বিষয়ে একটি বক্তব্য দিয়েছি। স্লাইডগুলি এখানে দেওয়া হয়েছে।
রুবি উচ্চ-স্তরের ফাংশনগুলি সমর্থন করে (অ্যারে # ম্যাপ, ইনজেক্ট এবং নির্বাচন করুন দেখুন) তবে এটি এখনও একটি আবশ্যকীয়, অবজেক্ট-ওরিয়েন্টেড ভাষা।
এটি কার্যকরী ভাষার অন্যতম মূল বৈশিষ্ট্য যা এটি পরিবর্তনীয় অবস্থা এড়িয়ে চলে। ফাংশনাল ল্যাঙ্গুয়েজে কোনও ভেরিয়েবলের ধারণা নেই যেমন আপনার রুবি, সি, জাভা বা অন্য কোনও অপরিহার্য ভাষায় থাকতে পারে।
ক্রিয়ামূলক ভাষার আরেকটি মূল বৈশিষ্ট্য হ'ল এটি "কীভাবে" পরিবর্তে "কী" এর শর্তে একটি প্রোগ্রাম সংজ্ঞায়িত করার দিকে মনোনিবেশ করে। কোনও ওও ভাষায় প্রোগ্রামিং করার সময়, আমরা "কী" (শ্রেণি / পদ্ধতির নাম) থেকে প্রয়োগকরণ ("কীভাবে") আড়াল করার জন্য ক্লাস এবং পদ্ধতিগুলি লিখি তবে শেষ পর্যন্ত এই পদ্ধতিগুলি এখনও বিবৃতিগুলির ক্রম ব্যবহার করে লেখা হয়। কার্যকরী ভাষায়, আপনি মৃত্যুদন্ডের ক্রমটি নির্দিষ্ট করে না, এমনকি নীচের স্তরেও।
আমি সমর্থন করি যে, বা একটি কার্যকরী শৈলীতে একটি ভাষায় প্রোগ্রাম করার দক্ষতা একটি কার্যকরী ভাষা তৈরি করে না।
আমি আমার কলেজগুলিকে আঘাত করতে চাই এবং এমনকি কয়েকমাস সপ্তাহে নিজেকে জাভা কোড লিখতে পারি ।
কার্যকরী ভাষা থাকা কেবল আপনি যা করতে পারেন তা নয়, যেমন উচ্চ-অর্ডার ফাংশন, প্রথম শ্রেণির ফাংশন এবং কারিরিং। খাঁটি ফাংশনগুলিতে পার্শ্ব-প্রতিক্রিয়া যেমন আপনি করতে পারেন না সে সম্পর্কেও এটি is
এটি গুরুত্বপূর্ণ কারণ এটি কার্যকারিতা সংক্রান্ত প্রোগ্রামগুলির কারণগুলির একটি বড় অংশ বা জেনারেলের কার্যকরী কোড, কারণ সম্পর্কে তর্ক করা সহজ। কোড যখন যুক্তি করা সহজ হয় তখন বাগগুলি অগভীর হয়ে যায় এবং ধারণাগত পৃষ্ঠে ভাসতে থাকে যেখানে সেগুলি স্থির করা যায়, যার ফলস্বরূপ কম বগি কোড দেয়।
রুবি এর মূল বিষয় অবলম্বনযুক্ত, তাই এটি কার্যকরী শৈলীর পক্ষে যথাযথ সমর্থন থাকলেও এটি নিজেই কার্যকরী ভাষা নয়।
এটি যাইহোক আমার বৈজ্ঞানিক মতামত।
সম্পাদনা করুন: পূর্ববর্তী উত্তর এবং এই উত্তরে আমি এখন পর্যন্ত যে সূক্ষ্ম মন্তব্য পেয়েছি তার জন্য বিবেচনা করে, আমি মনে করি বস্তু-ভিত্তিক বনাম কার্যকরী তুলনা আপেল এবং কমলাগুলির মধ্যে একটি।
আসল পার্থক্যকারী হ'ল মৃত্যুদন্ড কার্যকর করার ক্ষেত্রে নিরপেক্ষ হওয়া বা না হওয়া। ক্রিয়ামূলক ভাষাগুলিতে তাদের প্রাথমিক ভাষাগত গঠন হিসাবে অভিব্যক্তি থাকে এবং মৃত্যুদন্ড কার্যকর করার ক্রমটি প্রায়ই অলস বা সংজ্ঞায়িত বা সংজ্ঞায়িত হয়। কঠোর সম্পাদন সম্ভব তবে কেবল যখন প্রয়োজন হয় তখন ব্যবহৃত হয়। অপ্রয়োজনীয় ভাষায়, কঠোরভাবে মৃত্যুদণ্ড কার্যকর করা ডিফল্ট এবং যখন অলস সম্পাদন সম্ভব হয় তবে এটি প্রায়শই করণীয় এবং অনেক প্রান্তের ক্ষেত্রে অনির্দেশ্য ফলাফলও পেতে পারে।
এখন, এটি আমার বৈজ্ঞানিক মতামত।
"সত্য" কার্যকরী হওয়ার জন্য রুবিকে নিম্নলিখিত প্রয়োজনীয়তাগুলি পূরণ করতে হবে।
অপরিবর্তনীয় মান: একবার "পরিবর্তনশীল" সেট হয়ে গেলে, এটি পরিবর্তন করা যায় না। রুবিতে, এর অর্থ হল আপনাকে কার্যকরভাবে ধ্রুবকের মতো ভেরিয়েবলগুলি চিকিত্সা করতে হবে। ভাষাটি সম্পূর্ণরূপে সমর্থিত নয়, আপনাকে প্রতিটি পরিবর্তনশীল ম্যানুয়ালি স্থির করতে হবে।
কোনও পার্শ্ব-প্রতিক্রিয়া নেই: যখন কোনও প্রদত্ত মান পাস করা হয় তবে একটি ক্রিয়াকলাপে সর্বদা একই ফলাফলটি ফিরে আসতে হবে। এগুলি অপরিবর্তনীয় মূল্যবোধগুলির সাথে একসাথে চলে যায়; একটি ফাংশন কখনই একটি মান নিতে পারে এবং এটি পরিবর্তন করতে পারে না, কারণ এটি এমন কোনও পার্শ্ব-প্রতিক্রিয়া সৃষ্টি করবে যা ফলাফল ফেরত দেওয়ার ক্ষেত্রে স্পর্শকাতর।
উচ্চ-অর্ডার ফাংশন: এগুলি এমন ফাংশন যা আর্গুমেন্ট হিসাবে ফাংশনগুলিকে মঞ্জুরি দেয় বা ফাংশনটিকে রিটার্ন মান হিসাবে ব্যবহার করে। এটি যুক্তিযুক্তভাবে কোনও কার্যকরী ভাষার অন্যতম গুরুত্বপূর্ণ বৈশিষ্ট্য।
কার্বিং: উচ্চ-অর্ডার ফাংশনগুলির দ্বারা সক্ষম, কারিরিং এমন একটি ফাংশনকে রূপান্তরিত করে যা একাধিক যুক্তি একটি ফাংশনে রূপ নেয় যা একটি যুক্তি নেয়। এটি আংশিক ফাংশন অ্যাপ্লিকেশনটির সাথে একসাথে চলে যায়, যা বহু-যুক্তি ফাংশনকে এমন ফাংশনে রূপান্তর করে যা কম আর্গুমেন্ট গ্রহণ করে তবে এটি মূলত did
পুনরাবৃত্তি: নিজে থেকেই একটি ফাংশন কল করে লুপিং। যখন আপনার পরিবর্তনীয় ডেটাতে অ্যাক্সেস নেই তখন পুনরাবৃত্তি ডেটা নির্মাণ এবং চেইন ব্যবহার করতে ব্যবহৃত হয়। এটি কারণ লুপিং একটি কার্যকরী ধারণা নয়, কারণ এটি একটি নির্দিষ্ট সময়ে লুপের স্থিতি সংরক্ষণ করতে ভেরিয়েবলগুলি চারপাশে পাস করতে হবে।
অলস-মূল্যায়ন, বা দেরি-মূল্যায়ন: মূল্যগুলির প্রসেসিংয়ে মুহুর্ত পর্যন্ত প্রসেসিংয়ে এটির প্রয়োজন হয় actually উদাহরণস্বরূপ, আপনার কাছে এমন কিছু কোড রয়েছে যা অলস-মূল্যায়ন সক্ষম করে ফিবোনাচি সংখ্যাগুলির তালিকা তৈরি করেছে, ফলস্বরূপ মানগুলির মধ্যে অন্য কোনও ফাংশন যেমন পুটস দ্বারা প্রয়োজনীয়তার প্রয়োজন না হওয়া অবধি এই প্রক্রিয়াটি এবং গণনা করা হবে না।
প্রস্তাবনা (কেবলমাত্র একটি ধারণা)mode
ফাংশনাল দৃষ্টান্ত সহ ফাইলগুলি ঘোষণার জন্য
একটি নির্দেশনা পাওয়ার জন্য আমি কোনও ধরণের সংজ্ঞা দিলে দুর্দান্ত হতে পারি , উদাহরণস্বরূপ
মোড 'ফাংশনাল'
রুবি একটি বহু-দৃষ্টান্তমূলক ভাষা যা প্রোগ্রামিংয়ের কার্যকরী শৈলীতে সমর্থন করে।
রুবি হ'ল একটি অবজেক্ট-ভিত্তিক ভাষা, যা অন্যান্য দৃষ্টান্তগুলিকে সমর্থন করতে পারে (কার্যকরী, অপরিহার্য, ইত্যাদি)। তবে, যেহেতু রুবির প্রতিটি জিনিসই একটি বস্তু, এটি মূলত একটি ওও ভাষা।
উদাহরণ:
"হ্যালো"। রিভার্স () = "ওলেহ", প্রতিটি স্ট্রিং একটি স্ট্রিং অবজেক্ট উদাহরণ এবং আরও অনেক কিছু forth
এটি আপনার "কার্যকরী ভাষা" এর সংজ্ঞা উপর নির্ভর করে। ব্যক্তিগতভাবে, আমি মনে করি শব্দটি নিজেই যথেষ্ট সমস্যাযুক্ত যখন কোনও পরম হিসাবে ব্যবহৃত হয়। নিছক ভাষার বৈশিষ্ট্যগুলির চেয়ে একটি "কার্যকরী ভাষা" হওয়ার পক্ষে আরও বেশি দিক রয়েছে এবং সর্বাধিক নির্ভর করে আপনি কোথায় যাচ্ছেন তার উপর নির্ভর করে। উদাহরণস্বরূপ, ভাষা চারপাশের সংস্কৃতি এক্ষেত্রে বেশ গুরুত্বপূর্ণ। এটি কি কার্যকরী শৈলীকে উত্সাহ দেয়? উপলব্ধ গ্রন্থাগারগুলি সম্পর্কে কী? তারা কি আপনাকে এগুলিকে কার্যকরী উপায়ে ব্যবহার করতে উত্সাহিত করে?
উদাহরণস্বরূপ, বেশিরভাগ লোকজন স্কিমকে একটি কার্যকরী ভাষা বলবে। তবে কমন লিস্পের কী হবে? একাধিক- / একক-নামস্থান সমস্যা এবং গ্যারান্টিযুক্ত টেল-কল নির্মূলকরণ (যা কিছু সিএল বাস্তবায়ন যেমন সংকলক সেটিংসের উপর নির্ভর করে) সমর্থন করে, প্রচলিত ভাষার তুলনায় স্কিমকে ভাষা হিসাবে বেশি উপযুক্ত করে তোলে না isn't লিস্প, এবং এখনও, বেশিরভাগ লিস্টাররা সিএলকে একটি কার্যকরী ভাষা বলবে না। কেন? কারণ এর চারপাশের সংস্কৃতিটি প্রচুর পরিমাণে সিএল এর অপরিহার্য বৈশিষ্ট্যগুলির উপর নির্ভর করে (যেমন এলওওপি ম্যাক্রোর মতো, উদাহরণস্বরূপ, বেশিরভাগ স্কিমার সম্ভবত এটি ভ্রমন করবে)।
অন্যদিকে, একজন সি প্রোগ্রামার সিএলকে একটি কার্যকরী ভাষা বিবেচনা করতে পারে। যে কোনও লিস্প উপভাষায় লিখিত বেশিরভাগ কোড অবশ্যই আপনার সি কোডের সাধারণ ব্লকের চেয়ে শৈলীতে অনেক বেশি কার্যকরী। তেমনিভাবে, স্কেল হ্যাস্কেলের তুলনায় খুব আবশ্যকীয় ভাষা। অতএব, আমি মনে করি না যে কোনও নির্দিষ্ট হ্যাঁ / কোনও উত্তর হতে পারে না। কোনও ভাষা কার্যকরী বলতে হবে বা না তা আপনার দৃষ্টিভঙ্গির উপর নির্ভর করে।
আমার মনে হয় রুবি আসলে কোনও বহু-দৃষ্টান্তের ভাষা নয়। বহু-দৃষ্টান্ত লোকেরা তাদের পছন্দের ভাষাটিকে এমন কিছু হিসাবে লেবেল করতে চায় যা বিভিন্ন ক্ষেত্রে কার্যকর।
আমি বর্ণনা করব রুবি একটি অবজেক্ট ওরিয়েন্টেড স্ক্রিপ্টিং ভাষা। হ্যাঁ, ফাংশনগুলি হ'ল প্রথম শ্রেণীর অবজেক্ট (সাজানোর), তবে এটি এটিকে কার্যকরী ভাষা করে না। আইএমও, আমি যোগ করতে পারে।
ফাংশনাল প্রোগ্রামিংয়ে পুনরাবৃত্তি সাধারণ common প্রায় কোনও ভাষা পুনরাবৃত্তি সমর্থন করে, তবে টেল কল অপ্টিমাইজেশন (টিসিও) না থাকলে পুনরাবৃত্তির অ্যালগোরিদম প্রায়শই অকার্যকর হয় ।
কার্যকরী প্রোগ্রামিং ভাষাগুলি লেজ পুনরাবৃত্তিকে অনুকূলকরণ করতে সক্ষম এবং ধ্রুবক স্থানে এ জাতীয় কোড কার্যকর করতে পারে। কিছু রুবি বাস্তবায়ন লেজ পুনরাবৃত্তি অপ্টিমাইজ করে, অন্যটি করে না, তবে সাধারণভাবে রুবি বাস্তবায়নের জন্য টিসিও করার প্রয়োজন হয় না। দেখুন রুবি টেইল কল অপটিমাইজেশন সম্পাদন করে?
সুতরাং, যদি আপনি কিছু রুবি কার্যকরী শৈলী লেখেন এবং কিছু নির্দিষ্ট প্রয়োগের টিসিওর উপর নির্ভর করেন তবে আপনার কোড অন্য কোনও রুবি ইন্টারপ্রেটারে খুব অকার্যকর হতে পারে। আমি মনে করি এই কারণেই রুবি কোনও কার্যকরী ভাষা নয় (উভয়ই পাইথন নয়)।
কড়া কথায় বলতে গেলে, কোনও ভাষা "ফাংশনাল" হিসাবে বর্ণনা করার কোনও মানে হয় না; বেশিরভাগ ভাষা কার্যকরী প্রোগ্রামিংয়ে সক্ষম। এমনকি সি ++ হয়।
ক্রিয়ামূলক শৈলী হ'ল কমবেশি আবশ্যকীয় ভাষা বৈশিষ্ট্যের একটি উপসেট, সিনট্যাকটিক চিনির সাথে সমর্থিত এবং কিছু সংকলক অপটিমাইজেশন যেমন অপরিবর্তনীয়তা এবং লেজ-পুনরাবৃত্তি সমতলকরণ,
পরেরটি যুক্তিযুক্তভাবে একটি স্বল্প বাস্তবায়ন-নির্দিষ্ট প্রযুক্তি এবং এটি প্রকৃত ভাষার সাথে কোনও সম্পর্ক রাখে না। X64 সি # 4.0 সংকলক পুচ্ছ-পুনরাবৃত্তি অপ্টিমাইজেশন করে, যখন x86 কোনও বোকা কারণেই না করে।
সিনট্যাকটিক চিনির প্রায়শই কিছুটা বা অন্য কোনও পরিমাণে প্রায়শই কাজ করা যায়, বিশেষত যদি ভাষার কোনও প্রোগ্রামযোগ্য প্রম্পম্পাইলার (যেমন সি এর # ডেফাইন) থাকে।
এটি জিজ্ঞাসা করা কিছুটা অর্থবহ হতে পারে, "ভাষা __ কী আবশ্যক প্রোগ্রামিং সমর্থন করে?", এবং উত্তরটি উদাহরণস্বরূপ লিস্পের সাথে "না" "
দয়া করে বইটির শুরুতে একবার দেখুন: "এ-গ্রেট-রুবি-ই বুক" । এটি আপনাকে জিজ্ঞাসা করছে এমন খুব নির্দিষ্ট বিষয় নিয়ে আলোচনা করে। আপনি রুবিতে বিভিন্ন ধরণের প্রোগ্রামিং করতে পারেন। আপনি যদি কার্যক্রমে মত প্রোগ্রাম করতে চান তবে আপনি এটি করতে পারেন। আপনি যদি জরুরীভাবে প্রোগ্রাম করতে চান তবে আপনি এটি করতে পারেন। এটি একটি সংজ্ঞা প্রশ্ন যা শেষ পর্যন্ত রুবি কার্যকর হয়। দয়া করে, ব্যবহারকারী ক্যামফ্লান এর উত্তর দেখুন।