স্মাইলবাসায় গল্ফ করার টিপস


11

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

আমি 12Me21 ঘন ঘন দেখার জন্য আশা করি :)

উত্তর:


11

string!=""সঙ্গে প্রতিস্থাপনstring>""

এসবি আপনাকে তাদের কোডপয়েন্টগুলির উপর ভিত্তি করে স্ট্রিংয়ের উপর বৃহত্তর / কম তুলনা করার অনুমতি দেয়। যাইহোক, খালি স্ট্রিংটি সেখানে সবচেয়ে ছোট স্ট্রিং হিসাবে বিবেচিত হয়।

সুতরাং যে পরিস্থিতিতে string!=""আপনি যে কোনওটি ব্যবহার করতে পারেন string>""বা ""<stringযেহেতু প্রতিটি স্ট্রিং প্রতিটি স্ট্রিংয়ের চেয়ে বড় ""এবং ""কম। আপনি যদি ব্যবহার করেন <বা তার >উপর নির্ভর করে যে বিবৃতিটির বৈধ বাক্য গঠন হওয়ার আগে বা পরে সাদা বাক্সের প্রয়োজন হয় যা আপনার বাইটগুলিও সংরক্ষণ করতে পারে।

উদাহরণ স্বরূপ:

WHILE S$!=""

পরিণত হতে পারে

WHILE S$>""

এবং আরও গল্ফড

WHILE""<S$

সমস্ত স্ট্রিং সত্যবাদী। এমনকি খালিও।
শামুক_

আহ ঠিক আছে. বোধ হয়।
Rɪᴋᴇʀ

6

ব্যবহার ?, ., @, এবং বন্ধ না স্ট্রিং

বেসিকের অনেক উপভাষা ?মুদ্রণের জন্য সমর্থন করে এবং এসবিও এর ব্যতিক্রম নয়। অত্যন্ত স্বল্প পাঠ্য আউটপুট ফাংশন থাকা একটি বড় সুবিধা big

স্মাইলব্যাসিক-এ, এটিতে .মূল্যায়ন করা হয় 0.0, তাই এটি স্থান বাঁচাতে 0 এর জায়গায় ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ: SPSET 0,21হতে পারে SPSET.,21, 1 বাইট সংরক্ষণ। ( SPSET0,21অবৈধ কারণ SPSET0এটি কোনও ব্যবহারকারী সংজ্ঞায়িত ফাংশন হতে পারে) EXEC.একটি প্রোগ্রাম লুপকে চিরকালের জন্য তৈরি করার একটি অতি স্বল্প উপায় (তবে এটি আপনার সমস্ত ভেরিয়েবলগুলি পুনরায় সেট করে, তাই এটি সর্বদা ব্যবহারযোগ্য হয় না)

লেবেল (জন্য ব্যবহৃত GOTO, GOSUBএবং পড়া DATA) হিসাবে প্রতিনিধিত্ব করা হয় @LABELSmileBASIC হবে। যখন কোনও অভিব্যক্তিতে ব্যবহৃত হয়, এগুলি আসলে স্ট্রিং হিসাবে বিবেচিত হয় as উদাহরণস্বরূপ, BGMPLAY"@305C"হিসাবে লেখা যেতে পারেBGMPLAY@305C

স্ট্রিংগুলি স্বয়ংক্রিয়ভাবে একটি লাইনের শেষে (বা প্রোগ্রামের শেষে) বন্ধ হয়ে যায়। ?"Hello, World!"হিসাবে লেখা যেতে পারে ?"Hello, World!। দৈর্ঘ্য পরিবর্তন না করে প্রোগ্রামগুলিকে একাধিক লাইনে বিভক্ত করে আরও পঠনযোগ্য করতে এটি ব্যবহার করা ?"Meow"BEEP 69যেতে পারে : হতে পারে

?"Meow
BEEP 69

বাহ, এমএমএল শুরু করতে লেবেলগুলি ব্যবহার করা উন্মাদ। এটি কখনই ভাবিনি, যদিও এটি আপনার চরিত্রের সেটকে সীমাবদ্ধ করে।
শামুক_

হেক্সাডেসিমাল ডিজিটের সংখ্যা বা কোনও চিঠি ছিল কিনা তা যাচাই করার জন্য আমি অন্য যে জায়গাটি ব্যবহার করেছি তা হ'ল: এটির @A<POP(H$)চেয়ে কম সংক্ষিপ্ততর "@"<POP(H$)(বিষয়টি Aকোনও ব্যাপার নয়, এটি কেবল কখনও প্রথম চরিত্রটি চেক করে না কারণ এটি কখনই একই হবে না)
12

3

এর পরিবর্তে স্ট্রিং ইনডেক্সিং ব্যবহার করুন MID$

MID$ফাংশন অনেক বুনিয়াদি একটি সাধারণ ফাংশন একটি স্ট্রিং মাঝখানে কোথাও থেকে একটি সাবস্ট্রিং পেতে হয়। যাইহোক, যদি আপনার কিছু সূচকে কেবল চরিত্রটি পেতে হয় তবে স্ট্রিং ইন্ডেক্সিং ব্যবহার করা আরও ছোট। উদাহরণ স্বরূপ:

PRINT MID$("ABC",2,1)
PRINT "ABC"[2]

এই উভয় মুদ্রণ সি স্ট্রিংগুলি একটি চরিত্রের ভিত্তিতে অ্যারে-জাতীয় সূচকে সমর্থন করে, সুতরাং যদি আপনাকে কেবল একবারে একটি অক্ষর পরীক্ষা করতে হয় তবে এটি করার সেরা উপায় এটি।


স্ট্রিংগুলি এভাবে কীভাবে সংশোধন করা যায় সে সম্পর্কে আপনার কথা বলা উচিত। A$=@AA:A$[2]="BD":A$[0]="":A$[2]="C"
12

আমি সম্ভবত স্ট্রিংগুলি মূলত চরিত্রের অ্যারেগুলি সম্পর্কে আরও কয়েকটি উত্তর লিখব তবে এটি আরও ভাল, কারণ এগুলিকে একের মধ্যে রাখাই বেশ কাজ।
শামুক_

... বা আপনি কিছু লিখতে পারেন;)
শামুক_

এটি অন্যান্য ভাষায় কীভাবে কাজ করে আমি তার সাথে খুব বেশি পরিচিত নই।
12

2

কখন ব্যবহার করবেন :(বা না)

:চরিত্র এসবির একটি বিবৃতি ব্রেকার হিসেবে ব্যবহৃত হয়। মূলত, আপনি এটির মতো একটি লাইনে স্টেটমেন্ট স্ট্যাক করার জন্য এটি ব্যবহার করেন:

PRINT "HELLO!":PRINT "GOODBYE!"

অন্যথায়, আপনার গড় বিবৃতিটি একটি নতুন লাইন দ্বারা বিভক্ত:

PRINT "HELLO!"
PRINT "GOODBYE!"

বাস্তবে, আপনার প্রায়শই কোলন ব্যবহার করার প্রয়োজন হয় না need যেহেতু বিবৃতিগুলি সিনট্যাক্টিক্যালি বৈধ টোকেনগুলিতে বিভক্ত করা যায়, পার্সার কখন শেষ হয় এবং অন্যটি শুরু হয় তা বের করার ঝোঁক থাকে। একই প্রায়শই সাদা স্থানের জন্য যায় for

PRINT"HELLO!"PRINT"GOODBYE!"

অবশ্যই, এটি সবসময় কাজ করে না। সবসময় অস্পষ্ট মামলা এবং অবৈধ বাক্য গঠন যেখানে আপনাকে স্পষ্টভাবে বিবৃতি ভঙ্গ করতে হয়। উদাহরণস্বরূপ নিন:

PRINT "HELLO";END

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

সাধারণভাবে, যদি কিছু অস্পষ্ট মনে হয়, এটি কাজ করে কিনা তা চেষ্টা করে দেখুন। যদি তা না হয় তবে বিবৃতিটি ভঙ্গ করুন। তদ্ব্যতীত, অবৈধ সিনট্যাক্স উত্পন্ন করে এমন কোনও কিছুই 12Me21 উল্লিখিত হিসাবে সঠিকভাবে হাইলাইট করা হয়নি।


2

সিনট্যাক্স হাইলাইটার ব্যবহার করুন!

স্মাইলব্যাসিকের কোড সম্পাদকের একটি সিন্ট্যাক্স হাইলাইটার অন্তর্নির্মিত রয়েছে যা কোডটি কাজ করবে কিনা তা নির্ধারণ করতে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, আপনি যদি চেষ্টা করার চেষ্টা করেন তবে BEEP0এটি তা হাইলাইট করবে না কারণ একটি ফাংশন এবং একটি অঙ্কের মধ্যে একটি স্থান থাকা দরকার। তবে BEEP.কাজ করে, কারণ। একটি সংখ্যা নয়।

সাধারণত কোডটি X=7BEEPবৈধ হয়, যেহেতু একটি সংখ্যা দিয়ে ফাংশন শুরু করতে পারে না, সুতরাং এসবি এটি ধরে নেয় 7এবং BEEPপৃথক। যাহোক. X=7ENDঅনুমোদিত নয় (এবং হাইলাইট করা হয়নি), কারণ এটি 7E...একটি সংখ্যা হিসাবে ব্যাখ্যা করার চেষ্টা করে তবে E এর পরে কোনও অঙ্ক নেই বলে এটি ব্যর্থ হয় এবং একটি ত্রুটি ঘটায়। সাধারণত এটি নির্ধারণ করা বেশ শক্ত হবে তবে খুব নির্ভরযোগ্য সিনট্যাক্স হাইলাইটারের সাহায্যে আপনি কী করতে পারবেন এবং কী করতে পারবেন না তা বলা খুব সহজ।

আমার স্মাইলব্যাসিক সিনট্যাক্স হাইলাইটারটি এসবি এর আচরণের সাথে পুরোপুরি মেলে (আশা করি) ডিজাইন করা হয়েছে, যাতে আপনি কোডটি বৈধ কিনা তা পরীক্ষা করতে আপনি এটি ব্যবহার করতে পারেন।

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="https://12Me21.github.io/sbhighlight3/sbhighlight.js"></script>
		<link rel="stylesheet" type="text/css" href="https://12Me21.github.io/sbhighlight3/style.css">
		<link rel="stylesheet" type="text/css" href="https://12Me21.github.io/external/smilebasicfont.css">
		<script>
			function update(event){
				$code.textContent=$input.innerText;
				//must be innerText since contentedible and textContent are too dumb to understand linebreaks
				//contenteditable adds <br>s which textContent ignores
				//whyyyyy
				applySyntaxHighlighting($code,true);
			}
			
			function setCaretPosition(elem,caretPos){
				if(elem){
					if(elem.createTextRange) {
						var range=elem.createTextRange();
						range.move('character',caretPos);
						range.select();
					}else{
						if(elem.selectionStart){
							elem.focus();
							elem.setSelectionRange(caretPos,caretPos);
						}else
							elem.focus();
					}
				}
			}
		</script>
		<style>
			#editcontainer{
				position: absolute;
			}
			#editcontainer>pre{
				position: absolute;
				left: 0;
				top: 0;
				
			}
			pre.csssucks *{
				color:transparent !important;
				background-color:transparent !important;
				caret-color: white;
			}
			pre.csssucks {
				color:transparent !important;
				background-color:transparent !important;
				caret-color: white;
				border-color:transparent;
				padding-right: 50ch;
			}
		</style>
	</head>
	<body>
		Use SB font:<input type="checkbox" autocomplete="off" onchange="$code.dataset.sbfont=$input.dataset.sbfont=this.checked;update()"></input>
		<button onclick="update()">force update</button>
		<hr>
		<div id="editcontainer">
			<pre id="$code">test</pre>
			<pre id="$input" class="csssucks" contenteditable="true" spellcheck="false" onkeydown="setTimeout(function(){update(event)},2);">test</pre>
		</div>
	</body>
</html>


1

এমওডি অপারেটরটি এড়িয়ে চলুন

মডুলাস অপারেটরটি সত্যই দীর্ঘ, এবং সম্ভব হলে এড়ানো উচিত।

যদি আপনি কোনও স্ট্রিং থেকে অক্ষরগুলি পান তবে আপনি কেবল তার পরিবর্তে স্ট্রিংটি পুনরাবৃত্তি করতে পারেন:

"ABC"[X MOD 3]
("ABC"*9)[X] (assuming X will always be less than 27)

কখনও কখনও আপনি ANDপরিবর্তে 1 অক্ষর সংরক্ষণ করতে পারেন :

X MOD 4
3AND X

0

OUTরিটার্ন মানগুলি বাদ দেওয়া

একটি OUTফর্ম ফাংশন একাধিক রিটার্ন সহ; আপনি OUTকীওয়ার্ডের পরে ফেরতের মানগুলি গ্রহণ করতে ভেরিয়েবলগুলি নির্দিষ্ট করে দিন । ব্যবহার করে একটি উদাহরণ DTREAD:

DTREAD OUT yearVar,monthVar,dayVar

তবে আপনি যদি কেবলমাত্র চলতি মাসের মতো একটি মান চান? আপনি বাকী মানগুলি গ্রহণ করার জন্য কেবল কোনও ভেরিয়েবল নাম না লিখে বাকী মূল্যগুলি "উপেক্ষা" করতে পারেন! তবে আপনাকে কমাতে চলে যেতে হবে (মাঝে মাঝে alচ্ছিক রিটার্ন বাদে))

DTREAD OUT ,monthVar,

যা আরও গল্ফ করা যেতে পারে

DTREAD OUT,M,

0

ব্যবহার LAST()

এখন যেহেতু স্মাইলব্যাসিক 4 জাপানে বাইরে এসেছে, আমরা গল্ফের সম্ভাব্য কিছু সঞ্চয় পরীক্ষা করতে পারি। তাত্ক্ষণিকভাবে আমার কাছে ঝাঁপিয়ে পড়া একটি হ'ল নতুন LAST()ফাংশন, যা অ্যারে বা স্ট্রিংয়ের শেষ সূচকটি দেয়। আপনি একটি বাইট সংরক্ষণ করতে পারেন।

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