SmileBASIC patut mendapat perhatian lebih. Saya hanya melihat 3 pengguna di sini (termasuk saya sendiri!) Memberikan jawaban SB, dan sementara itu tidak mengejutkan saya, itu mengecewakan saya. Ini menjadi bahasa berbayar serta menjadi dialek BASIC tentu saja mematikan orang, tetapi bagi mereka yang memilikinya sebenarnya cukup fleksibel dan, secara mengejutkan, dapat golf. Saya pikir saya akan membuka utas kiat ini dan melihat apa yang muncul.
Saya berharap 12Me21 untuk sering berkunjung :)
Menggunakan
?
,.
,@
, dan string tertutupBanyak dialek dukungan BASIC
?
untuk pencetakan, dan SB tidak terkecuali. Memiliki fungsi output teks yang sangat singkat adalah keuntungan besar.Dalam SmileBASIC,
.
dievaluasi menjadi0.0
, sehingga dapat digunakan sebagai pengganti 0 untuk menghemat ruang. Misalnya:SPSET 0,21
bisaSPSET.,21
, hemat 1 byte. (SPSET0,21
tidak valid karenaSPSET0
bisa menjadi fungsi yang ditentukan pengguna)EXEC.
adalah cara yang sangat singkat untuk membuat loop program selamanya (tapi itu me-reset semua variabel Anda, jadi itu tidak selalu dapat digunakan)Label (digunakan untuk
GOTO
,,GOSUB
dan membacaDATA
) direpresentasikan seperti@LABEL
pada SmileBASIC. Ketika digunakan dalam ekspresi, mereka sebenarnya diperlakukan sebagai string. Sebagai contoh,BGMPLAY"@305C"
dapat ditulis sebagaiBGMPLAY@305C
String secara otomatis ditutup pada akhir baris (atau akhir program).
?"Hello, World!"
dapat ditulis sebagai?"Hello, World!
. Ini juga dapat digunakan untuk membuat program lebih mudah dibaca dengan memecahnya menjadi beberapa baris tanpa mengubah panjangnya:?"Meow"BEEP 69
bisasumber
@A<POP(H$)
lebih pendek dari"@"<POP(H$)
(A
tidak masalah, itu hanya memeriksa karakter pertama karena tidak akan pernah sama)Gunakan pengindeksan string sebagai ganti
MID$
The
MID$
fungsi adalah fungsi umum di banyak dasar-dasar untuk mendapatkan substring dari suatu tempat di tengah-tengah string. Namun, jika Anda hanya perlu mendapatkan karakter di beberapa indeks, menggunakan pengindeksan string jauh lebih pendek. Sebagai contoh:Kedua cetak ini C. Strings mendukung pengindeksan seperti array berdasarkan karakter, jadi jika Anda hanya perlu memeriksa satu karakter pada satu waktu, ini adalah cara terbaik untuk melakukannya.
sumber
A$=@AA:A$[2]="BD":A$[0]="":A$[2]="C"
Kapan harus menggunakan
:
(atau tidak)The
:
karakter digunakan sebagai pernyataan-breaker di SB. Pada dasarnya, Anda menggunakannya untuk menumpuk pernyataan pada satu baris seperti:Jika tidak, pernyataan rata-rata Anda dipatahkan oleh baris baru:
Pada kenyataannya, Anda seringkali tidak perlu menggunakan usus besar sama sekali. Selama pernyataan dapat dipecah menjadi token yang valid secara sintaksis, parser cenderung mencari tahu ketika satu berakhir dan yang lainnya dimulai. Hal yang sama sering berlaku untuk spasi putih.
Tentu saja, ini tidak selalu berhasil. Selalu ada kasus ambigu dan sintaks yang tidak valid di mana Anda harus secara eksplisit melanggar pernyataan. Ambil contoh:
Tanda titik koma berarti
PRINT
mengharapkan ekspresi lain untuk dicetak, kecuali jika pernyataan tersebut terputus di sana (kami menggunakan tanda titik koma untuk menekan baris baru.) Di sini diasumsikanEND
sebagai nilai, meskipun merupakan kata kunci, dan mencoba untuk mencetaknya, menghasilkan dalam kesalahan. Jadi, kita harus secara eksplisit mematahkan pernyataan ini, baik itu titik dua atau baris baru.Secara umum, jika sesuatu tampak ambigu, cobalah untuk melihat apakah itu berfungsi. Jika tidak, hancurkan pernyataan itu. Selain itu, apa pun yang akan menghasilkan sintaks tidak valid tidak disorot dengan benar seperti yang disebutkan 12Me21.
sumber
Gunakan stabilo sintaksis!
Editor kode SmileBASIC memiliki stabilo sintaksis bawaan, yang dapat digunakan untuk menentukan apakah kode akan berfungsi atau tidak. Misalnya, jika Anda mencoba melakukannya
BEEP0
, itu tidak akan menyorotnya, karena harus ada ruang antara fungsi dan angka. NamunBEEP.
berhasil, karena. bukan angka.Biasanya kode like
X=7BEEP
adalah valid, karena fungsi tidak bisa dimulai dengan angka, jadi SB mengasumsikan itu7
danBEEP
terpisah. Namun.X=7END
TIDAK diperbolehkan (dan tidak disorot), karena mencoba menafsirkan7E...
sebagai angka, tetapi karena tidak ada angka setelah E, gagal, menyebabkan kesalahan. Biasanya ini akan sangat sulit untuk diketahui, tetapi dengan stabilo sintaksis yang sangat andal, akan lebih mudah untuk mengatakan apa yang Anda bisa dan tidak bisa lakukan.Highlighter sintaks SmileBASIC saya dirancang untuk (mudah-mudahan) cocok dengan perilaku SB, sehingga Anda dapat menggunakannya untuk memeriksa apakah kode itu valid.
sumber
Hindari operator MOD
Operator modulus sangat panjang, dan harus dihindari jika memungkinkan.
Jika Anda mendapatkan karakter dari string, Anda bisa mengulangi string:
Terkadang Anda dapat menyimpan 1 karakter dengan
AND
:sumber
Menghilangkan
OUT
nilai kembaliSebuah
OUT
fungsi bentuk adalah salah satu dengan beberapa hasil; Anda menentukan variabel untuk menerima nilai kembali setelahOUT
kata kunci. Contoh menggunakanDTREAD
:Tetapi bagaimana jika Anda hanya menginginkan salah satu dari nilainya, seperti bulan ini? Anda dapat "mengabaikan" sisa nilai dengan hanya tidak menulis nama variabel apa pun untuk menerimanya! Namun, Anda harus meninggalkan koma (selain dari pengembalian opsional sesekali.)
Yang bisa lebih lanjut golf
sumber
Menggunakan
LAST()
Sekarang SmileBASIC 4 keluar di Jepang, kita dapat memeriksa beberapa potensi penghematan golf. Salah satu yang langsung melompat ke saya adalah
LAST()
fungsi baru , yang mengembalikan indeks terakhir dari array atau string. Anda dapat menyimpan satu byte.sumber