কোটলিনে গল্ফ করার টিপস


22

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

কোটলিনে এটির জেভিএম ভাইবোনদের মধ্যে বৈশিষ্ট্যের এক অনন্য সংমিশ্রণ রয়েছে যা এটি গল্ফিংয়ের জন্য সম্ভাব্য আকর্ষণীয় করে তোলে:

সুতরাং, আমি কীভাবে আমার কোটলিন প্রোগ্রামের শেষ কয়েকটি বাইটগুলি গ্রাস করব? উত্তর প্রতি এক টিপস, দয়া করে।


2
এমন কোনও গল্ফ ভাষাতে আগ্রহ থাকতে পারে যা কোটলিনের কিছু দীর্ঘ নাম সংক্ষিপ্ত করে, তবে প্রচুর অতিরিক্ত যোগ করে না (অন্তত প্রাথমিকভাবে)? আমি সাধারণ 1 টি অক্ষর তৈরি করার কথা ভাবছি, স্ট্রিং চরকে সংক্ষিপ্ত করে তৈরি করতে এবং কেবল 1 টি উদ্ধৃতি চিহ্ন দিয়ে একক বর্ণের স্ট্রিং যুক্ত করব?
jrtapsell

* সাধারণ ফাংশন
jrtapsell '

কোটলিনের গল্ফিংয়ের আগ্রহ এতটা
কোডডগল্ফ /

আমি আরও কোটলিন সমাধান জমা দেওয়ার পরিকল্পনা করছি! আমাকে আপনার প্রকল্পটিও পরীক্ষা করে দেখতে হবে।
টাইলার ম্যাকডোনেল

উত্তর:


4

এক্সটেনশন ফাংশন

এক্সটেনশন ফাংশনগুলি পদ্ধতিগুলির মধ্যে অন্তর্নির্মিত নামগুলিকে হ্রাস করতে সত্যই সহায়তা করতে পারে এবং সেগুলির শৃঙ্খলাগুলি উদাহরণ হতে পারে:

fun String.c() = this.split("").groupingBy{it}.eachCount()

তবে এটি কেবল তখনই সহায়তা করে যদি:

ক) সংজ্ঞাটি বাতিল করতে কলটি যথেষ্ট দীর্ঘ

খ) কলটি পুনরাবৃত্তি হয়েছে

পদ্ধতির চেয়ে ল্যাম্বডাস ব্যবহার করা

ল্যাম্বডাস বাইট সংরক্ষণ করে, রিটার্ন কীওয়ার্ড ব্যবহার না করেই ফিরে আসতে পারেন

KotlinGolfer

আমি এখানে একটি প্রকল্প শুরু করেছি যা সুন্দর কোটলিন কোড নেয় এবং টেস্ট এবং টিআইও লিঙ্কগুলির সাথে স্বয়ংক্রিয়ভাবে পোস্ট দেয়


4

+পরিবর্তে ব্যবহার করুনtoString

যেমন কেউ আশা করতে পারে , তেমনি স্ট্রিং কনটেনটেশনের জন্য অপারেটরটিকে Stringওভারলোড করে +

print("Hel" + "lo")

যাইহোক, দস্তাবেজগুলি পরীক্ষা করা আমাদের জানায় যে এটি কেবল গ্রহণ করে Any?না String। যেমন বলা হয়েছে:

প্রদত্ত অন্যান্য বস্তুর স্ট্রিং উপস্থাপনার সাথে এই স্ট্রিংটিকে সংযুক্ত করে একটি স্ট্রিং প্রদান করে।

অন্য কথায়, কনটেটেটিংয়ের আগে ডানদিকে String + anythingকল .toString()করা নিশ্চিত করে নিন । এটি আমাদেরকে সংক্ষিপ্ত it.toString()করতে সহায়তা করে ""+it, সেরাতে 8 টি বাইট সঞ্চয় এবং সবচেয়ে খারাপে 6 বাইট।


foldপরিবর্তে ব্যবহার করুনjoinToString

উপরের সাথে সম্পর্কিত, আপনি যদি কল করছেন mapএবং তারপরে joinToString, আপনি foldপরিবর্তে ব্যবহার করে এটি সংক্ষিপ্ত করতে পারেন ।

list.map{it.repeat(3)}.joinToString("")
list.fold(""){a,v->a+v.repeat(3)}

টিআইএল ভাঁজ একটি জিনিস, দুর্দান্ত
কুইন


1

প্যারামগুলিতে ইন্টের সংজ্ঞা দেওয়া হচ্ছে

এটির ক্ষেত্রে এটি সম্ভবত বেশ কয়েকটি নির্দিষ্ট ব্যবহারের ক্ষেত্রে থাকবে যেখানে এটি মূল্যবান হতে পারে তবে সাম্প্রতিক প্রশ্নে আমি গল্ফ করেছিলাম যে আমার ভেরিয়েবলটি ফাংশনটিতে সংজ্ঞায়িত করার পরিবর্তে alচ্ছিক প্যারামিটার হিসাবে সংজ্ঞায়িত করে কিছু বাইট সংরক্ষণ করতে পারলাম।

এই প্রশ্নের আমার উত্তর থেকে উদাহরণ :

ফাংশনে পরিবর্তনশীল সংজ্ঞায়িত:

fun String.j()={var b=count{'-'==it}/2;var a=count{'/'==it};listOf(count{'o'==it}-a,a-b,b)}

ভ্যারিয়েবলগুলি প্যারাম হিসাবে সংজ্ঞায়িত করা:

fun String.j(b:Int=count{'-'==it}/2,a:Int=count{'/'==it})=listOf(count{'o'==it}-a,a-b,b)

কারণ var a=এটি একই দৈর্ঘ্য হিসাবে a:Int=এটি সংজ্ঞায়িত করতে একই সংখ্যক বাইট হবে (এটি কেবল এর ক্ষেত্রে Int) তবে যেহেতু আমার কাছে এখন ফাংশনটিতে কেবল 1 লাইন রয়েছে আমি ড্রপ করতে পারি {}এবং আমি একটিও ড্রপ করতে পারি ;(অন্যটি হ'ল) ক ,) দ্বারা প্রতিস্থাপিত

সুতরাং যদি এমন কোনও ফাংশন রয়েছে যার জন্য কোনও অন্তর্নির্ধারণের প্রয়োজন হয়, এবং যদি আপনি ফাংশনটির কোনও সংজ্ঞাটি না লিখে থাকেন তবে 1 লাইনার হবে - তবে এটি প্যারামিটার হিসাবে করা একটি দু'টি বাইট সংরক্ষণ করবে


0

toপোতা ফাংশন

এখানে একটি মানক ইনফিক্স ফাংশন রয়েছে toযা Pairদুটি মান তৈরি করে । এটি সাধারণত এর mapOf()সংজ্ঞায়িত Mapকরতে ব্যবহৃত হয় তবে এটি সম্ভবত নির্মাতার চেয়ে অনেক কম হতে পারে Pair()

Pair(foo,bar)   //constructor
foo to bar      //best case 
(foo)to(bar)
((foo)to(bar))  //worst case

0

ল্যাম্বদা আর্গুমেন্টে নির্মাণ করা

বলুন আপনি Pair<*,*>একটি ল্যাম্বডায় একটি গ্রহণ করতে চান । সাধারণত, এটি পরিচালনা করা বিরক্তিকর হবে। উদাহরণস্বরূপ, এখানে একটি ল্যাম্বদা রয়েছে যা Pairদুটি গ্রহণ করে এবং দুটি মান সমান কিনা তা পরীক্ষা করে:

{it.first==it.second}

এটি দীর্ঘায়িত এবং আনাড়ি। সৌভাগ্য যে, Kotlin যদি আপনি কোন destructable টাইপ destructure করতে পারবেন (যে কোন প্রকার কার্যকরী componentN()যেমন পদ্ধতি, Pair, Tripleইত্যাদি) একটি ল্যামডা আর্গুমেন্ট হিসাবে। সুতরাং, আমরা এটি নিম্নলিখিত উপায়ে আবার লিখতে পারি:

{(a,b)->a==b}

এটি এফ # এর মতো কিছুতে টিপলের সাথে মেলে এমন প্যাটার্নের মতো দেখায় এবং এটি অনেক ক্ষেত্রেই। কিন্তু কোটলিনে বিভিন্ন ধরণের ধরণের ডেস্ট্রাকচারিং সমর্থন করে ( MatchResultএটি একটি দরকারী))

আপনি আরও যুক্তি নিতে পারেন, যদিও। বলুন আপনার ল্যাম্বদা একটি Pairএবং একটি অতিরিক্ত মান নিতে হয়েছিল । আপনি কেবল এইভাবে ল্যাম্বদা স্বাক্ষরটি লিখতে চাইবেন:

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