আমি ভাষা সিনট্যাক্স সম্পর্কে লিখছি। সেখানে কি এমন কোনও ভাষা রয়েছে যেখানে পদ্ধতির নামের ভিতরে প্যারামিটারগুলি রাখা হয়েছে?


29

জাভাস্ক্রিপ্টে:

function getTopCustomersOfTheYear(howManyCustomers, whichYear) {
   // Some code here.
}
getTopCustomersOfTheYear(50, 2010);

সি # তে:

public List<Customer> GetTopCustomersOfTheYear(int howManyCustomers, 
 int whichYear)
{
   // Some code here
}
List<Customer> customers = GetTopCustomersOfTheYear(50, 2010);

পিএইচপি ইন:

public function getTopCustomersOfTheYear($howManyCustomers, $whichYear)
{
   // Some code here
}
$customers = getTopCustomersOfTheYear(50, 2010);

এই বাক্য গঠনটি সমর্থন করে এমন কোন ভাষা আছে কি:

function GetTop(x)CustomersOfTheYear(y)
{
    // Some code here
}
returnValue = GetTop(50)CustomersOfTheYear(2010);

এটি কোনও ফাংশন লেখার আরও অর্থপূর্ণ, আরও পঠনযোগ্য ফর্ম নয়?

আপডেট: আমি এই প্রশ্নটি জিজ্ঞাসা করার কারণটি হ'ল, আমি একটি নতুন ভাষার জন্য একটি নতুন সিনট্যাক্স সম্পর্কে একটি নিবন্ধ লিখছি। যাইহোক, আমি ভেবেছিলাম যে প্রাকৃতিক ভাষার আরও ঘনিষ্ঠ হওয়ার কারণে ডিক্লেয়ারিং পদ্ধতিগুলির জন্য এই জাতীয় বাক্য গঠনটি আরও ভাল এবং বিকাশকারীদের পক্ষে আরও বন্ধুত্বপূর্ণ হতে পারে এবং ভাষার শিখন-বক্ররেখা হ্রাস করতে পারে। আমি কেবল জানতে চেয়েছিলাম এই বৈশিষ্ট্যটি ইতিমধ্যে বিবেচনা করা হয়েছে কি না।


12
পড়ার পক্ষে এটি আরও সহজ হতে পারে, একবার আপনি যদি প্রতিমায় অভ্যস্ত হয়ে যান তবে মনে হয় এটির জন্য সঠিক পার্সার লেখা আমার পক্ষে কঠিন হবে।
ম্যাসন হুইলার

2
"স্থানধারক" বলতে কী বোঝ? এই প্রশ্নটি পোজ হিসাবে বোঝা শক্ত, যদিও শেষ কোড উদাহরণটি উদ্দেশ্য-সি এবং স্মলটালকের স্মরণ করিয়ে দেয়।
গ্রেফ্যাড

3
এএফআইএইচ স্মলটালক প্রথম ভাষা ছিল এই সিনট্যাক্সটি একচেটিয়াভাবে পছন্দ করার মতো 'hello world' indexOf: $o startingAt: 6বা ব্যবহার করে Rectangle width: 100 height: 200। বিটিডাব্লু।, এই প্রশ্নটিতে ভুল কী?
maaartinus

8
যদি আপনি একটি প্রথম বন্ধনী স্থানান্তর করেন তবে আপনি পাবেন: returnValue = GetTop(50, CustomersOfTheYear(2010))যা আমার কাছে সমানভাবে পাঠযোগ্য এবং দেখতে আরও নমনীয় / অরথোগোনাল। ... এবং হ্যাঁ, এটি সাধারণ সাধারণ বাক্য গঠন।
ডাগলিনিজ

2
@ আরনাউদ: আমি সম্পূর্ণ একমত প্রস্তাবিত বাক্য গঠনটি পচনের অভাবের জন্য কেবলমাত্র একটি কাজ।
back2dos

উত্তর:


41

হ্যাঁ, এবং হ্যাঁ হ্যাঁ এমন একটি ভাষা আছে, এবং হ্যাঁ, অনেক লোক একবার ব্যবহারে অভ্যস্ত হয়ে গেলে এটিকে আরও পঠনযোগ্য বলে মনে হয়।

উদ্দেশ্য-সি-তে পদ্ধতিটি হ'ল:

- (NSArray*)getTop:(int)count customersOfTheYear:(Year)year;

এটি প্রকৃতপক্ষে একটি দৃষ্টিনন্দন উদাহরণ যা খুব ভালভাবে পড়ে না, তাই আসল কোড থেকে এখানে আরও একটি ভাল:

+ (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha;

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

UIColor *violet = [UIColor colorWithRed:0.8 green:0.0 blue:0.7 alpha:1.0];

উদ্দেশ্য উদ্দেশ্য সি প্রোগ্রামিং ল্যাঙ্গুয়েজে ছেদ করা পরামিতিগুলির সাথে বার্তার নামগুলি সম্পর্কে আরও পড়ুন ।


16
প্রথমবার আমি এটি সম্পর্কে উদ্দেশ্য সিআইতে পড়লাম ভেবেছিলাম এটি চতুর, তবে এটির নামকরণ প্যারামিটারগুলি আরও কঠোর এবং পরিচালনা করা আরও শক্ত করে তোলে। তা ছাড়া, ভাল উত্তর।
জেডজেআর

2
পদ্ধতিটি কীভাবে আহ্বান করা হয়েছে তার একটি উদাহরণ ভুল হবে না।
গ্রেফ্যাড

3
@ জেডজেআর, উইকিপিডিয়ার মতামত বিপরীতে থাকা সত্ত্বেও ওবজ -সি এর স্টাইলটি নামযুক্ত প্যারামিটারের মতো , তবে আলাদা। উপরের উদাহরণে, পদ্ধতি নাম হল: +colorWithRed:blue:green:alpha:। আমি প্যারামিটার পদ্ধতি ম্যাচের জন্য নাম ব্যবহার ঘটেছে, কিন্তু আমি যত সহজে ব্যবহার করতে পারতেন r, b, g, এবং a। জাভাস্ক্রিপ্ট অফারগুলির মতো নামযুক্ত পরামিতি সহ, আপনি মানগুলি অ্যাক্সেস করতে দেওয়া প্রকৃত নামগুলি ব্যবহার করবেন। সত্য নামের প্যারামিটারগুলি সাধারণত যে কোনও ক্রমে দেওয়া যেতে পারে এবং পরামিতিগুলি optionচ্ছিক হতে পারে। একই, হ্যাঁ, তবে মৌলিকভাবে পৃথক।
কালেব

2
আমি পাইথন ভাবছিলাম: color(r=0xFF,g=0xFF,b=0x55)বা color(b=0x32,r=0x7F,a=.5,g=0xFF)তাই এবং। এর পরে খুব নাম দেওয়া প্যারামিটারগুলি কল করি call :)
জেডজেআর

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

25

উত্তর: ছোট্টকল

http://en.wikipedia.org/wiki/Smalltalk

'hello world' indexOf: $o startingAt: 6 জাভা এর মত "hello world".indexOfStartingAt(o, 6)

Rectangle width: 100 height: 200 জাভা এর মত new Rectangle(100, 200)

বাক্য গঠনটি হ'ল ... expression word1: parm1 word2: parm2 word3: parm3 ...পদ্ধতির নামটি সমস্ত শব্দের সংমিশ্রণ।


17

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

এখানে একটি সুন্দর পরিষ্কার উদাহরণ:

Person bo = new Person();
bo.Set.FirstName("Bo").LastName("Peep").Age(16).Size("Little").LostHerSheep();

আপনি দেখতে পারেন কিভাবে ভালো কিছু বাস্তবায়িত করা যাবে রান্ডি প্যাটারসন 's একটি অনর্গল ইন্টারফেস ডিজাইন করতে কিভাবে

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

aThing one: 'one';
  two: 'two';
  other.

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

আয়েন্দে রাহিয়ান আলোচনা করেছেন যে কীভাবে "সাবলীল ইন্টারফেস" তার নিজের নামটি প্রাপ্য করার জন্য "পদ্ধতি চেইনিং" থেকে উল্লেখযোগ্য পরিমাণে পৃথক হতে পারে

আচরণ চালিত বিকাশের (বিডিডি) ব্যবহৃত নতুন কয়েকটি সরঞ্জামে সাধারণত সাবলীল ইন্টারফেসগুলি দেখা যায় এবং এমনকি এটি নতুন কন্ট্রেন্ট-ভিত্তিক দৃ As় মডেলটিতে NUnit নামে একটি বড় .NET ইউনিট পরীক্ষার সরঞ্জাম খুঁজে পেয়েছে ।

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

সম্ভবত আপনি এই মডেলগুলির উন্নতি করতে পারেন; এইভাবেই আমরা দুর্দান্ত নতুন ভাষা পাই। তবুও, আমি বিশ্বাস করি যে পুরোপুরি বোঝার পদ্ধতিতে শৃঙ্খলাবদ্ধ ও সাবলীল ইন্টারফেস আপনাকে একটি দুর্দান্ত সূচনা পয়েন্ট দেবে যা থেকে আপনার ধারণাগুলি বিকশিত হবে!


2
এখন পর্যন্ত সর্বাধিক গবেষণামূলক উত্তরের জন্য +1, যদিও উদাহরণ যুক্ত করা এবং পঠনযোগ্যতার জন্য পুনরায় শব্দকরণ সাহায্য করতে পারে।
হাইলেম

@ হাইলেম, আমাকে ফিরে যেতে এবং উদাহরণ এবং আরও কিছু বিশদ যুক্ত করার জন্য আপনাকে ধন্যবাদ!
জন টোবলার

3
উত্সাহিত কারণ এটি সাবলীল শৈলীর একটি ভাল বর্ণনা, তবে দয়া করে নোট করুন যে ওপ এটি যা জিজ্ঞাসা করছে তা আসলে এটি নয়। আমি এটি পড়ার পরে, প্রশ্নটি একটি একক ফাংশন বা পদ্ধতির নামের অংশগুলির সাথে ছেদ করা পরামিতিগুলির সাথে সম্পর্কিত । উল্লেখ্য প্রস্তাবিত ফাংশন ঘোষণা: function GetTop(x)CustomersOfTheYear(y)। এটি একটি একক ফাংশন, দুটি পৃথক ফাংশনে শৃঙ্খলাবদ্ধ কল নয়।
কালেব

@ কালেব আমার মনে হয় তিনি এখানে এটি দেখানোর চেষ্টা করছেন যে এই ইনফিক্স পরামিতিগুলি একটি সাবলীল ইন্টারফেস (এই উত্তর) বা নামকরণকৃত প্যারামিটারগুলি (অন্য উত্তর) করার এক জটিল উপায়। এখনও অবধি আমি তাদের পক্ষে কোনও সুবিধা দেখিনি যে একটি সাবলীল ইন্টারফেস / নামযুক্ত প্যারামিটারগুলি আরও ভাল করতে পারে না।
ইজকাটা

16

উদ্দেশ্য-সি তা করে। এখানে একটি আদর্শ প্রোটোটাইপ রয়েছে:

- (void) areaWithHeight: (float) height andWidth: (float) width;

আপনি এই জাতীয় পদ্ধতিটিকে কীভাবে কল করবেন তা এখানে:

float area = [self areaWithHeight: 75 andWidth: 20];

অবজেক্টিভ-সি মূলত ম্যাক ওএস এক্সের জন্য কোকো এবং আইওএসের জন্য কোকো টাচ ব্যবহার করা হয়, তবে জিসিসি জিসিটি যে প্রতিটি প্ল্যাটফর্মের কাজ করে তার প্রায়শই ওজেক্টিভ-সি কোড তৈরি করবে।


দুঃখিত যে বুলেটটি হাইফেন হওয়া উচিত ছিল। আমি অনুমান করি যে উত্তর পাঠ্যে হাইফেনগুলি মার্কআপ হিসাবে নেওয়া হয়েছে। অবজেক্টিভ-সি-তে হাইফেনগুলি এমন কোনও পদ্ধতির সাথে ঘোষিত করতে ব্যবহৃত হয় যা কোনও বস্তুর অন্তর্ভুক্ত - [foo বার: x] যেখানে foo একটি বস্তু বা শ্রেণীর উদাহরণ - যখন শ্রেণি পদ্ধতির জন্য আরও লক্ষণ ব্যবহৃত হয়, তখন সি ++ স্থির সদস্য ফাংশন হিসাবে চিহ্নিত হয় as
মাইক ক্রফোর্ড

13

কমন লিস্পে, আপনি এই জাতীয় ফাংশনের জন্য কীওয়ার্ড আর্গুমেন্টগুলি সংজ্ঞায়িত করতে পারেন:

(defun area (&key width height)
    (* width height))

ফাংশনটিকে এভাবে বলা হয়:

(area :width 2 :height 3)

অ্যাডায় আপনার কোনও বিশেষ ঘোষণার দরকার নেই - আপনি কোনও প্রক্রিয়া কল করতে পারেন বা বিকল্পভাবে ফাংশন করতে পারেন যুক্তিগুলিকে যথাযথভাবে তালিকাভুক্ত করে বা এই জাতীয় যুক্তিগুলির নাম দিয়ে:

a := area(width => 2, height => 3);

শেষ অবধি, বুস্ট লাইব্রেরিতে সি ++ এ বৈশিষ্ট্য যুক্ত করতে হ্যাকের একটি স্তর রয়েছে: http://www.boost.org/doc/libs/re कृपया/libs/parameter/doc/html/index.html


5

আমি এর নামটি খুঁজে পেলাম না, তবে অনুরূপ কিছু সম্পাদন করার জন্য একটি নকশার প্যাটার্ন রয়েছে, যেখানে কোনও ফাংশন কল বর্ণিত পরিবর্তিত কোনও নতুন অবজেক্ট ফিরিয়ে দেয়। উদাহরণ স্বরূপ:

query = db.getTopCustomers(50).forYear(2010);

এটি প্রায়শই ব্যবহার করা হয় না কারণ হুডের অধীনে অব্যবহারযোগ্য জটিলতা এড়াতে আপনার ডেটাটি খুব অরথগোনাল হতে হবে তবে সঠিক পরিস্থিতিতে এটি কার্যকর হতে পারে।


6
একে সাবলীল ইন্টারফেস ডিজাইনের স্টাইল বলা হয় ।
জেস্পার

@ জেস্পার, আমি যা দেখছি তা jQuery শৃঙ্খলার সাথে খুব মিল। আমি কি সঠিক?
সা Saeedদ নেমতি

হ্যাঁ, @ সাeedদ, jQuery এই স্টাইলটি ব্যবহার করে।
কার্ল বিলেফেল্ট

5

পাইথনের কীওয়ার্ড প্যারামিটার রয়েছে। ফাংশন সংজ্ঞা উদাহরণ

def getTopCustomers(count,year):
...

ফাংশন কল উদাহরণ

x = getTopCustomers(year=1990, count=50)

(আমি বুঝতে পারি যে এটি মূল প্রশ্নের মূল দিক থেকে যথেষ্ট নয়, তবে যদি লিস্পে কীওয়ার্ড প্যারামিটারগুলি যোগ্য হয় তবে এটি করুন Small স্মার্টটালক এবং অবজেক্টিভ সিতে, তবে আর্গুমেন্টের মধ্যে কীওয়ার্ডগুলি আসলে ফাংশনটির নাম / খোঁজার অংশ হিসাবে রয়েছে ।)


আমি ব্যক্তিগতভাবে এটি আরও ভাল পছন্দ করি কারণ এর জন্য প্যারামিটারের ক্রম জানা থাকলে প্যারামিটারের নাম ছাড়াই ফাংশনটি কল করার বিকল্প দেয়
পাবলো মেসচার

4

আগদার মিশ্রণ সংকেত রয়েছে

if_then_else x y z = case x of
                     True -> y
                     False -> z

 if cond then x else y

যখনই ফাংশনটির নাম একটি আন্ডারস্কোর দিয়ে দেওয়া হয়েছে, তখন এটি মাঝখানে একটি যুক্তির সাহায্যে দুটি অংশে বিভক্ত হতে পারে


4

যদিও না একটি প্রোগ্রামিং ভাষা SE প্রতি , শসা ফাংশন নাম মাঝখানে, যা শূণ্যস্থান অন্তর্ভুক্ত করতে পারেন এবং ইংরেজি মত চেহারা বোঝানো হয় যে পরামিতি গ্রহণ করে।

তবে 'ফাংশন' রুবিতে সংজ্ঞায়িত করা হয়েছে

# definition
Given /^I calculate (.*) times (.*)$/ do |x, y|
    @result = x.to_i * y.to_i
end

Then /^the result should be (.*)$/ do |v|
    @result.should == v.to_i
end

# usage
Scenario:
    Given I calculate 6 times 9
    Then the result should be 42

4

টেক্সে আপনি একটি "আর্গুমেন্ট প্যাটার্ন" থাকা ম্যাক্রোগুলিকে সংজ্ঞায়িত করতে পারেন যা মূলত আপনার কলিং প্রোটোকলটি বিনামূল্যে। আপনার নির্দিষ্ট উদাহরণের জন্য, আপনি ব্যবহার করতে পারেন

\def\getTopCustomers#1OfTheYear#2;{%
  The #1 top customers of the year #2.
}
\getTopCustomers 50 OfTheYear 2010;

মনে রাখবেন যে ;আপনি যদি রেজিস্টারগুলির সাথে খেলতে রাজি হন তবে এ থেকে মুক্তি পাওয়াও সম্ভব :

\newcount\customers
\newcount\year
\def\getTopCustomers#1OfTheYear{%
  \customers#1\relax
  \afterassignment\reallyGetTopCustomersOfTheYear
  \year
}
\def\reallyGetTopCustomersOfTheYear{%
  The {\the\customers} top customers of the year {\the\year}.
}
\getTopCustomers 50 OfTheYear 2010

টেক্স আপনাকে এর লেক্সারটি পুনরায় কনফিগার করার অনুমতি দেয় এবং \afterassignmentআমি উপরে যে ম্যাক্রোটি ব্যবহার করেছি তার জন্য ধন্যবাদ, আপনি সংখ্যাগুলি প্রেরণে বিল্ট-ইন পদ্ধতিগুলি ব্যবহার করতে পারেন। খুব সংবেদনশীল কলিং প্রোটোকল সংজ্ঞায়িত করা খুব দরকারী । উদাহরণস্বরূপ, টেবিলগুলির জন্য মার্কডাউন নোটেশন বোঝার জন্য টেক্স ম্যাক্রোগুলি লেখা খুব প্রশংসনীয়।

এখন আপনি জিজ্ঞাসা করেন যে টেক্স থেকে গ্রাহকরা যেখানে সংরক্ষণ করেন সেখানে আমি কীভাবে আমার ডাটাবেস অ্যাক্সেস করব? "তবে এটি অন্য একটি প্রশ্ন। :)

কমন লিস্পে, queryআপনাকে লিখতে দেওয়ার ম্যাক্রো সংজ্ঞায়িত করা অবশ্যই সম্ভব

(query getTopCustomers 50 OfTheYear 2010)

যেখানে getCustomers এবং OFFEear প্রতীক হিসাবে ব্যাখ্যা করা হয়। এটি ম্যাক্রোর কাজটি তখন তা বোঝার জন্য। কোড পঠনযোগ্যতার ডোমেনে সাধারণ লিস্পটি দুর্দান্ত (হ্যাঁ, আমি এটি বোঝাতে চাইছি!) কারণ ম্যাক্রো সিস্টেমটি আপনার অ্যাপ্লিকেশনের জন্য সুরযুক্ত সিউডো-ল্যাঙ্গুয়েজগুলি সহজেই তৈরি করতে দেয়। (আমি তাদের অ্যাপ্লিকেশন ভাষা বলা হয়।)

পিএস: দেখে মনে হচ্ছে কেউ সি ++ উদ্ধৃত করেনি। আপনি পেতে পারেন নিকটতম (প্রাক প্রসেসর ছাড়া) হয়

query.getTopCustomers(50).OfTheYear(2010):

কৌশলটি হ'ল কোনও প্রয়োগ (বা অন্য কোনও কিছু) যা প্রয়োগ করে তার উপরেও getTopCustomersএকটি রেফারেন্স দেয় । আপনি একটি ছোট ক্যোয়ারী ভাষা পর্যন্ত এই উদাহরণটি তৈরি করতে পারেন তবে তারপরে আপনাকে চূড়ান্ত বৈশিষ্ট্যগুলি সনাক্ত করতে হবে (একটি মান ফিরিয়ে দেওয়া) অথবা একটি পদ্ধতি যুক্ত করতে হবে (চেহারাটি সম্পাদন করে মানটি ফিরিয়ে দেওয়া)। যদি আপনি এটির মতো অনুভব করেন তবে আপনি এসটিএলের স্ট্রিম কন্ট্রোলারগুলিও অনুকরণ করতে পারেন এবং পছন্দ মতো জিনিস লিখতে সক্ষম হতে পারেনqueryOfTheYearfinalise

query << getTopCustomers(50) << OfTheYear(2010) << flush;

তবে এটি আবার অ্যাপ্লিকেশন ভাষার দিকে চলছে।

সম্পাদনা করুন: আমি @ উত্তরগুলি উপেক্ষা করেছি, এটি সাধারণ লিস্প এবং সি ++ (তবে টেক্স নয়!) উদ্ধৃত করে।


2

জাভাস্ক্রিপ্ট বা অন্য কোনও ভাষা যা ক্লোজারগুলিকে সমর্থন করে, আপনি এই জাতীয় ফাংশনটি কারি করতে পারেন :

function getTopCustomersFunc(count) {
    return function(year) {
       // run some query, return count customers from year
    }
}
var top20Func = getTopCustomersFunc(20);
var top20Customers2005 = top20Func(2005);
var top20Customers2008 = top20Func(2008);

1
+1 কারণ এটি আকর্ষণীয়, তবে মনে রাখবেন যে শীর্ষ ২০ ফ্যাঙ্কের '20 'এখন প্যারামিটার নয় তবে নামের অংশ যা আপনাকে প্যারামিটারের কথা মনে করিয়ে দেয়। আপনি শুধু সহজে বলতে পেরেছিলেন: var top5Func = getTopCustomersFunc(37);। '5' এখানে বিভ্রান্ত করছে, কিন্তু কোডটি ঠিক সেইরূপে কাজ করে যেমন ভেরিয়েবলটির নাম দেওয়া হয়েছিল top37Func
কালেব

1

এটি আপনার "ভাষা" এর সংজ্ঞা উপর নির্ভর করে তবে রোবটফ্রেমওয়ার্ক পরীক্ষার কাঠামো আপনাকে কীওয়ার্ডগুলি এভাবে সংজ্ঞায়িত করতে দেয়। এম্বেড থাকা যুক্তিতে তাদের ডকুমেন্টেশন থেকে :

Select ${animal} from list | Open page | pet selection
                            | Select item from list | animal_list | ${amimal}

উপরের একটি নতুন কীওয়ার্ড ঘোষণা করেছে (মূলত একটি ফাংশন) "তালিকা থেকে $ {প্রাণী} নির্বাচন করুন" যেখানে '{{প্রাণী।' একটি প্যারামিটার। আপনি এটিকে "তালিকা থেকে বিড়াল নির্বাচন করুন" বলছেন


এটি এসকিউএল বিবৃতি মত আমার কাছে মনে হয়। +1
সা Saeedদ নেমতি

1

7 অবহিত।

To create (employee - a person) being paid (salary - a number):
    say "Welcome to your new job, [name of employee]!";
    choose a blank row from the table of employees;
    now the paid entry is the salary;
    now the name entry is the name of the employee.

ইত্যাদি।


3
এটি ঠিক কীভাবে ভাষার সিনট্যাক্স কাজ করে তা ব্যাখ্যা করে না। অনেক লোক ইনফোমেজ ভাষার সাথে পরিচিত নন এবং কোডের অন্যান্য ক্ষেত্রগুলিতে কল বা এর ব্যবহার থেকে পরামিতিগুলিকে আলাদা করতে পারবেন না।

আমি এই ভাষায় এক ধরনের আগ্রহী। উত্তরটি কেবল একটি অন-বিস্তৃত কোডের নমুনার সাথে সংক্ষিপ্ত ছিল, তবে ওপি দ্বারা নমুনাগুলিও দেওয়া হয়েছিল (যদিও আরও প্রচলিত ভাষা সহ)। উইকি এটি পড়ার জন্য একটি দুর্দান্ত নিবন্ধ আছে।
YoYo

0

কমন লিস্পের কীওয়ার্ডগুলি ইতিমধ্যে উল্লেখ করা হয়েছে, তবে সাধারণ লিস্পের ম্যাক্রোগুলি এটিকে মোটামুটি সহজেই অনুমতি দেয়:

(defmacro get-my-element (from list at index)
  `(nth ,index ,list))

এটি তখন এর মতো বলা যেতে পারে:

(get-my-element from '(a b c) at 1) ;returns B

একটি বিষয় লক্ষণীয়, যদিও, শর্তাদি fromএবং atপ্রয়োগ করা হয় না। সেখানে কিছু থাকতে হবে, এগুলিকে পুরোপুরি এড়িয়ে যাওয়া একটি ত্রুটি, তবে যেহেতু ম্যাক্রো কেবল এগুলি ছাড়াই শেষ করে, তাই তারা পাঠযোগ্যতার বাইরে কী (যা গুরুত্বপূর্ণ) এর থেকে কিছু যায় আসে না:

(get-my-element from '(a b c) 3 1) ;also returns B

-2

ক্লোজারে, এই জাতীয় পরিস্থিতির জন্য কীওয়ার্ড আর্গুমেন্ট ব্যবহার করা সাধারণ eg

(get-customers :top 50 :year 2010)

কীওয়ার্ড আর্গুমেন্টগুলি যথেষ্ট নমনীয়, এগুলি alচ্ছিক হতে পারে এবং ডিফল্ট নির্দিষ্ট করা থাকে ইত্যাদি specified


-4

আপনি অজগর এ অনুকরণ করতে পারেন। উদাহরণ স্বরূপ,

def GetTop(customers, ofYear):
  #write some code here to get the customers

print GetTop(customers=50 ofYear=2010)

অথবা এমনকি

def GetTop(**args):
  #write some code here using the same parameter names as above

print GetTop({customers: 50, ofYear: 2010})

1
আপনার দ্বিতীয় উদাহরণের বাক্য গঠনটি ভুল। এছাড়াও, ইতিমধ্যে কেউ এটি পোস্ট করেছেন।
উইনস্টন ইওয়ার্ট

এই নিছক তৈরি (এবং অনেক ভালো ব্যাখ্যা) পয়েন্ট পুনরাবৃত্তি এই পূর্বে উত্তর যে 3 বছর আগে পোস্ট করা হয়েছে
মশা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.