অস্বীকৃতি: এই উত্তরের অংশগুলি এখানে পাওয়া অন্যান্য উত্তরের সাধারণীকরণ।
ল্যাম্বডাস তাদের যুক্তির ধরণগুলি নির্দিষ্ট না করে ব্যবহার করুন
এটি এর মতো কিছু জমা দেওয়ার অনুমতি দেওয়া হয়েছে: a=>a.size
পরিবর্তে (a:String)=>a.size
।
সনাক্তকারী হিসাবে ascii- চিহ্ন ব্যবহার করুন।
এর মধ্যে রয়েছে !%&/?+*~'-^<>|
। যেহেতু তারা অক্ষর নয়, তারা যখন অক্ষরগুলির পাশে থাকে তখন তারা পৃথক পৃথক করে।
উদাহরণ:
a=>b //ok
%=>% //error, parsed as one token
% => % //ok
val% =3 //ok
&contains+ //ok
if(x)&else* //ok
এর পরিবর্তে সেট ব্যবহার করুন
if (Seq(1,2,3,'A')contains x)... //wrong
if (Set(1,2,3,'A')(x))... //right
এটা সম্ভব কারণ Set[A] extends (A => Boolean)
।
আপনার যখন দুটি যুক্তি প্রয়োজন তখন একটি ত্রিযুক্ত ফাংশন ব্যবহার করুন।
(a,b)=>... //wrong
a=>b=>... //right
_
সম্ভব হলে-সিনট্যাক্সটি ব্যবহার করুন
এর নিয়মগুলি কিছুটা অস্পষ্ট, সংক্ষিপ্ততম পথটি খুঁজে পেতে আপনাকে মাঝে মাঝে কিছুটা খেলতে হবে।
a=>a.map(b=>b.size)) //wrong
a=>a.map(_.size) //better
_.map(_.size) //right
আংশিক প্রয়োগ ব্যবহার করুন
a=>a+1 //wrong
_+1 //better, see above
1+ //right; this treats the method + of 1 as a function
""+
পরিবর্তে ব্যবহার করুনtoString
a=>a.toString //wrong
a=>a+"" //right
ক্রম হিসাবে স্ট্রিং ব্যবহার করুন
""
যদি আপনি অ্যাক্টুলার ধরণের বিষয়ে চিন্তা না করেন তবে খালি সিকোয়েন্স তৈরির সংক্ষিপ্ততম উপায়
সংখ্যাগুলিকে স্ট্রিংয়ে এবং থেকে রূপান্তর করতে BigInt ব্যবহার করুন
বেস 10 ব্যতীত অন্য কোনও বেসকে একটি স্ট্রিংয়ে সংখ্যার রূপান্তর করার সবচেয়ে সংক্ষিপ্ততম উপায়টি বিগআইন্টের toString(base: Int)
পদ্ধতির মাধ্যমে
Integer.toString(n,b) //wrong
BigInt(n)toString b //right
আপনি যদি একটি স্ট্রিংকে কোনও সংখ্যায় রূপান্তর করতে চান তবে ব্যবহার করুন BigInt.apply(s: String, base: Int)
Integer.parseInt(n,b) //wrong
BigInt(n,b) //right
সচেতন থাকুন যে এটি একটি বিগআইএন্ট দেয়, যা বেশিরভাগ বারের মতো ব্যবহারযোগ্য, তবে উদাহরণ হিসাবে উদাহরণ হিসাবে কোনও সূচক হিসাবে ব্যবহার করা যায় না can't
সিকোয়েন্স তৈরি করতে সিক ব্যবহার করুন
a::b::Nil //wrong
List(...) //also wrong
Vector(...) //even more wrong
Seq(...) //right
Array(...) //also wrong, except if you need a mutable sequence
চরগুলির সিকোয়েন্সগুলির জন্য স্ট্রিংগুলি ব্যবহার করুন:
Seq('a','z') //wrong
"az" //right
অসীম অনুক্রমের জন্য স্ট্রিম ব্যবহার করুন
কিছু চ্যালেঞ্জ একটি অসীম অনুক্রমের n-th উপাদানটির জন্য জিজ্ঞাসা করে। স্ট্রিম এটির জন্য নিখুঁত প্রার্থী। মনে রাখবেন যে Stream[A] extends (Int => A)
, অর্থাত্ একটি স্ট্রিমটি সূচক থেকে সেই সূচকের উপাদানটিতে ফাংশন।
Stream.iterate(start)(x=>calculateNextElement(x))
প্রতীকী অপারেটরগুলি তাদের শব্দযুক্ত অংশগুলির পরিবর্তে ব্যবহার করুন
:\
এবং :/
পরিবর্তে foldRight
এবংfoldLeft
a.foldLeft(z)(f) //wrong
(z/:a)(f) //right
a.foldRight(z)(f) //wrong
(a:\z)(f) //right
hashCode
-> ##
throw new Error()
-> ???
ব্যবহার করুন &
এবং |
পরিবর্তে&&
এবং||
তারা বুলিয়ানদের জন্য একই কাজ করে তবে সর্বদা উভয় অপারেশনকে মূল্যায়ন করবে
ফাংশন হিসাবে আলিয়া দীর্ঘ পদ্ধতি
def r(x:Double)=math.sqrt(x) //wrong
var r=math.sqrt _ //right; r is of type (Double=>Double)
স্ট্যান্ডার্ড লাইব্রেরিতে ফাংশনগুলি জানুন
এটি সংগ্রহের পদ্ধতিগুলিতে বিশেষত প্রযোজ্য।
খুব দরকারী পদ্ধতি হ'ল:
map
flatMap
filter
:/ and :\ (folds)
scanLeft and scanRight
sliding
grouped (only for iterators)
inits
headOption
drop and take
collect
find
zip
zipWithIndex3
distinct and/or toSet
startsWith
#define
উদাহরণস্বরূপ সি ++ এর ক্ষেত্রেও প্রযোজ্য তবে আমি স্বীকার করি এটি খুব সুন্দরdef
এবংval
খাটো are