আমি যদি আমার সমস্ত রুবিকে লিখার সিদ্ধান্ত নিই তা যদি হ্যাস্কেলের মতো হয় তবে কি ঠিক হবে?


10

প্রদত্ত যে রুবি ভাল তালিকা অপারেশন ক্ষমতা ইন-বিল্ট ইন আছে - কমাতে, মানচিত্র, নির্বাচন করুন, সংগ্রহ ইত্যাদিতে Procs, ব্লক এবং Lambdas আছে, এবং চমৎকার পুনরাবৃত্তির সমর্থন (হয়েছে eachপরিবার), আমি যদি করার প্রচেষ্টা এটি একটি খারাপ নকশা সিদ্ধান্ত হবে আমার সমস্ত রুবি স্টাফগুলি সবচেয়ে বিশুদ্ধ-কার্যকরী উপায়ে সম্ভব? বিশেষত কোড / আই / ও নেই (যা এইভাবে কম স্পষ্ট পার্শ্ব প্রতিক্রিয়া) এর জন্য?

আমি হাস্কেলকে শিখছি (যাকে 'আসল' হ্যাকারের ভাষা বলা হয়) এবং এটি কাজ করার পদ্ধতিতে প্রেমে পড়েছি - আমি রুবিকে ভালবাসি, তবে মনে করি যখন আরও বেশি হাস্কেল স্পিরিট এতে প্রবেশ করায় তখন আরও মজা হতে পারে (ভাল, না 'রুবি প্রথমে এখান থেকে প্রচুর শিখতে / শিখতে পারবে না?)

গঠনমূলক দিকনির্দেশনা স্বাগত ...


13
কেন শুধু হাস্কেল লিখবেন না?

1
আমি একা হাস্কেলে লিখতাম, তবে রুবি এতটা খারাপ নয় যে পুরোপুরি ফেলে দেওয়া উচিত। আমি সত্যটি পছন্দ করি যে আমি স্ক্রিপ্ট করার সময় এটি ব্যবহার করতে পারি এবং অনেকগুলি দ্রুত পরীক্ষার জন্য আমি এআই স্টাফ শিখার সময় একসাথে হ্যাক করতে পছন্দ করি। তবে সম্ভবত এই কারণে যে আমি সবেমাত্র হাস্কেল শিখতে শুরু করেছি, শেষ পর্যন্ত আপনার পরামর্শ অনুসরণ করতে পারে :-)
নেমেসিসফিক্সেক্স

2
আপনি কেন স্ট্যাক ওভারফ্লোয়ের অনুমতি চাইছেন তা আমি বুঝতে পারি না। আপনি যদি কোনও টিমের সাথে অন্যদের সাথে ভাগ করে নেওয়ার কোডটি লিখছেন তবে আপনাকে আপনার কোডিং শৈলীর যে কোনওভাবে সমন্বয় করতে হবে। নাহলে কি ব্যাপার?
মাইক ড্যানিয়েলস

কেন জিজ্ঞাসা করছেন? কারণ আমি অভিজ্ঞ হ্যাকার এবং প্রোগ্রামারদের সৎ মতামতকে শ্রদ্ধা করি। প্রোগ্রামিংয়ের ক্ষেত্রে খাঁটি-কার্যকরী পদ্ধতির ব্যবহারের সুবিধাগুলি থাকতে পারে যা অভিজ্ঞ মনরা আমার সাথে ভাগ করে নিতে সক্ষম হতে পারে (এবং আমার মতো অন্যরা)।
nemesisfixx

"না" এর উদ্দেশ্যমূলক কারণগুলি বিবেচনা করে, এটি একটি বৈধ প্রশ্ন।
অ্যান্ড্রু গ্রিম

উত্তর:


16

আমি অজগর দিয়ে এটি করে চলেছি। আমি দেখতে পেলাম যে ভাষাটি এর জন্য ডিজাইন করা হয়নি সেগুলিতে একটি বংশগতভাবে খাঁটি কার্যকরী শৈলীতে লেখা জটিল is উদাহরণস্বরূপ, ইন_র্ডারের দুটি সংজ্ঞা বিপরীতে :

def in_order(xs):
    for i in range(1,len(xs)):
        if xs[i] > xs[i+1]:
            return False
    return True

inOrder :: (Ord a) => [a] -> Bool
inOrder xs = and $ zipWith (<=) xs (tail xs)

in_orderপাইথনে হাস্কেল উপায়ে লেখা উভয় ভার্বোজ হতে চলেছে (যেহেতু পাইথন প্রয়োজনীয় আইডিয়ামগুলিকে খুব ভালভাবে সমর্থন করে না) এবং ধীর (আলস্যতার কারণে হাস্কেলের স্থির স্থানের পরিবর্তে লিনিয়ার স্পেস)।

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

সুতরাং আমি আপনার প্রশ্নের উত্তর দয়ালু বলতে হবে । আপনাকে ভাবতে সহায়তা করতে আপনার কার্যকরী শিকড়গুলি ব্যবহার করুন তবে এটি অতিরিক্ত করবেন না। যেমন। কেবল মূর্খতার স্বার্থে রুবিতে অলস তালিকাগুলি অনুকরণ করা সম্ভবত এটির মূল্য অপেক্ষা আরও বেশি সমস্যা হতে চলেছে।


একরকম আপনার বিবরণ আমাকে প্যাসকেল সম্পর্কে ভাবতে বাধ্য করেছিল।
রসানী ২

@ রজনানী, ওহ? কোন কারণে কেন?

আমি জানি না, সম্ভবত এটির ইংরেজি ভালভাবে বোঝার অভাব বা আপনি যা বর্ণনা করেছেন তা কীভাবে ফিট করে (আমি ন্যূনতম) যেখানে প্যাস্কাল ইউনিটগুলিতে সাজানো / কাঠামোযুক্ত। প্রথম ধরণের কারণে কেবল কোনও মানসিক সংযোগ, আপনার সাথে কোনও সত্যিকারের সংযোগ নাও থাকতে পারে;)
রাসজনী

1
"আলস্যতার কারণে হাস্কেলের স্থির স্থানের পরিবর্তে রৈখিক স্থান" উক্তিটি সঠিক নয়। অলসতা এখনও রৈখিক ক্রম বোঝায়। আমি তবে আপনার বক্তব্য বুঝতে পারি।

3
@ অ্যারোমো, যদিও আমি আপনার বুঝতে পারি না। অর্ডার এর সাথে কী করার আছে? হাস্কেল আবর্জনা গ্রহণের পরে তুলনার তালিকার প্রধান সংগ্রহ করে ক্রমাগত স্থান আসে and; এটি ঠিক একটি লুপের মতো আচরণ করবে। অথচ পাইথনের তুলনার তালিকার তালিকাটি সম্পূর্ণরূপে উত্পন্ন করতে হবে এর মধ্যে andকোনটি এনালগ দেখার আগেই (আপনি যদি জেনারেটর ব্যবহার না করেন ... যা আমি মনে করি একটি সম্ভাবনা)।

7

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


1

আমি রুবিতে যে কিছু পরিস্থিতিতে পড়েছি তা আমার জন্য সহায়ক হতে বিশেষত কার্যকরী প্রোগ্রামিং এবং বিশেষত হাস্কেলকে বুঝতে পেরেছি। তবে আমি যত বেশি হাস্কেল শিখি, ততই আমি বুঝতে পারি যে রুবি যেহেতু হাস্কেলের মতোই হতে পারে তার থেকে এখন পর্যন্ত কতটা দূরে।

মডিউল / কোড লোডিং পরিস্থিতি একটি বিষয় হিসাবে, অত্যন্ত জটিল। বর্তমান দোভাষীর টেল কল অপ্টিমাইজেশন চালু নেই, সুতরাং আপনি হাস্কেলের মতো যেভাবে পুনরাবৃত্তিটি ব্যবহার করতে পারবেন না। এবং একবার আপনি মনাদসে উঠলে, হাস্কেল বনাম রুবিতে আপনি যে বিমূর্ততা অর্জন করতে পারেন তার সাথে আসলেই তুলনা নেই।

আপনি যদি আগ্রহী হন তবে আমি শিখছি বলে গিস্ট . github.com এ কিছু রুবি / হাস্কেল তুলনা কোড পোস্ট করছি।

আমি রুবীর কাছে যে কৌশলটি নিয়ে এসেছি তা সবচেয়ে ভাল কাজ করেছে যেখানে আমি করতে পারি যেখানে খাঁটি ফাংশন সন্ধান করা হয়েছে, এটিই মনে হচ্ছে যে আপনি করার চেষ্টা করছেন।


আমার স্মলটক পরীক্ষার এক ইন: self assert: ((m >>= f) >>= g) equals: (m >>= [:x | (f value: x) >>= g])। আপনি সচেতনভাবে মনডগুলি কেন ব্যবহার করতে পারবেন না তার কোনও কারণ নেই কারণ আপনি তাদের ব্যবহার করছেন না জেনেও (তালিকার মতো) এগুলি ব্যবহার করার বিপরীতে।
ফ্রাঙ্ক শায়ারার

0

আমি "হ্যাঁ" বলতাম। আপনি (আমার মনে হয়) আপনি যে বিষয়ে কথা বলছেন তা হ'ল রুবি ভাষায় কার্যকরী প্রোগ্রামিং প্রভাব। কার্যকরী দৃষ্টান্তের কিছু সত্যই সুন্দর ধারণা রয়েছে যা অবজেক্ট ওরিয়েন্টেড (বিশেষত কোনও পার্শ্ব প্রতিক্রিয়া নয়) এর প্রশংসা বা ওভারল্যাপ করে।

রুবি সম্পর্কে দুর্দান্ত বিষয়টি হ'ল এটি আপনাকে লিনিয়ার, আপত্তিযুক্ত ওরিয়েন্টেড বা কার্যকরী শৈলীতে বা এর কিছু মিশ্রণে কোড দেওয়ার অনুমতি দেয়। এবং আপনার সরল, লিনিয়ার স্ক্রিপ্টটি জটিলতা বৃদ্ধি পেলে ও ও / ক্রিয়ামূলক স্টাইলে রূপান্তর করতে পারে।


0

আপনি অন্যের সাথে সহযোগিতা করবেন কিনা তা নির্ভর করে। আপনি যদি নিজের দ্বারা কোডটিতে কাজ করছেন তবে আপনি যে স্টাইলটি সবচেয়ে স্বাচ্ছন্দ্যবোধ করেন তা ব্যবহার করুন। তবে, আপনি যদি অন্য রুবি প্রোগ্রামারদের সাথে কাজ করছেন তবে সেগুলি প্রোগ্রামিংয়ের খাঁটি কার্যকরী শৈলীতে অভ্যস্ত হতে পারে না এবং এইভাবে আপনার কোড দ্বারা বিভ্রান্ত হতে পারে। তারপরে আবার যদি আপনার সহযোগীরাও রুবিতে স্থানান্তরিত হাস্কেল প্রোগ্রামার হন তবে আপনার এই সমস্যা নাও হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.