Tips untuk bermain golf di Haxe

12

Tips umum apa yang Anda miliki untuk bermain golf di Haxe ? Saya mencari ide yang dapat diterapkan untuk masalah kode-golf dan yang juga setidaknya agak spesifik untuk Haxe (mis. "Hapus komentar" bukan jawaban).

Silakan kirim satu tip per jawaban.

Haxe dapat dijalankan online di sini !

Yytsi
sumber
Saya telah menggunakan Haxe cukup banyak di masa lalu, tetapi sejak saya mulai bermain golf saya belum banyak menggunakannya. Saya harus mencoba menggunakannya untuk bermain golf ...
ETHproduksi
@ ETHproductions Sama di sini. Hari ini, saya bermain golf dua kali dengannya, dan itu menyenangkan. Ini memiliki beberapa kemampuan bermain golf yang baik dengan (misalnya) daftar pemahaman dan iterator, jadi saya memutuskan untuk membuka pertanyaan untuk melihat apakah ada yang punya tips untuk dibagikan.
Yytsi

Jawaban:

8

Interpolasi string

Haxe mendukung interpolasi string pada string kutipan tunggal. Seperti string templat di JavaScript ES6, Anda bisa memasukkan ekspresi dalam string dengan ${...}:

trace('2 + 2 = ${2 + 2}');

Tidak seperti ES6, Anda bisa menghilangkan kurung keriting ketika ekspresi adalah variabel tunggal:

var x = 2 + 2;
trace('2 + 2 = $x');

Kedua contoh ini dicetak 2 + 2 = 4.

Produksi ETH
sumber
7

Array pemahaman

Haxe mendukung pemahaman array:

trace([for (i in 0...5) i]); // Prints 0,1,2,3,4

Tidak seperti banyak bahasa lain, Anda juga dapat menggunakannya whiledalam pemahaman:

var i = 5;
trace([while (i > 0) i--]); // Prints 5,4,3,2,1

Ini bisa sangat berguna ketika Anda tidak tahu berapa lama array yang Anda butuhkan.

Anda juga dapat rantai for, whiledan ifpernyataan:

trace([for (x in ['A','B','C','D'])
       for (y in ['x','y'])
       if (x + y != "Cx")
       x + y
]); // Prints Ax,Ay,Bx,By,Cy,Dx,Dy
Produksi ETH
sumber
Wow. Saya akan menghapus jawaban saya. Saya benar-benar membangun jawaban yang sama, hanya satu menit terlambat. Juga, Anda mungkin ingin mencatat bahwa itu sebenarnya mencetak tanda kurung siku di sekitar daftar, sehingga pembaca tidak akan bingung, karena beberapa tantangan memerlukan format output yang ketat.
Yytsi
@ TuukkaX Haha, itu kadang-kadang terjadi :) Saya akan memasukkan salah satu contoh Anda di sini, jika Anda tidak keberatan. Juga, coba.haxe.org tampaknya tidak mencetak tanda kurung ...
ETHproduksi
Yang menghitung produk cartesian rapi. Saya pikir itu akan menjadi tambahan yang bagus untuk posting Anda :)
Yytsi
6

Operator jangkauan

Haxe memiliki operator jangkauan ...yang dapat digunakan untuk membuat rentang bilangan bulat. Misalnya, alih-alih ini:

var i = 0;
while (i < 10) trace(i++);

Kamu bisa melakukan ini:

for (i in 0...10) trace(i++);

Spesifik untuk x...y:

  • xdan ykeduanya harus Ints.
  • xtidak boleh lebih besar dari y.
  • Ini mengembalikan objek IntIterator , yang dapat digunakan di tempat yang sama dengan Iterable apa pun.
Produksi ETH
sumber
1

Menjalankan pernyataan secara kondisional

Jelas Anda dapat menjalankan apa saja dengan persyaratan if:

if(n>5)doSomething(n);

Namun, jika Anda hanya memiliki satu pernyataan di atas, Anda dapat menggunakan operator kondisional ternary untuk menyimpan byte:

n>5?doSomething(n):0;

Anda kadang-kadang dapat menyimpan byte lain dengan menggunakan &&, meskipun ini sangat jarang karena &&hanya berfungsi jika kedua ekspresi mengembalikan boolean:

n>5&&doSomething(n);

Satu pengecualian utama untuk ini adalah kata kunci : jika Haxe berjalan ke dalam return, breakatau continue di mana saja , itu akan segera menjalankannya dan berhenti ekspresi apa pun itu kerjakan. Ini berarti bahwa alih-alih ini:

if(n>5)return n;

Anda dapat melakukan ini untuk menghemat 2 byte:

n>5&&return n;
Produksi ETH
sumber
1

Gunakan kata kunci dalam ekspresi

Fitur lain yang tidak biasa dari Haxe adalah bahwa semuanya adalah ekspresi . Misalnya, kode ini benar-benar valid:

function(n){while(n>0)n%4==1?return 6:n--;return 3;}

Oke, itu contoh yang tidak berguna, tapi semoga Anda mengerti maksud saya. Ini berfungsi dengan sebagian besar kata kunci:

function(n){while(n>0)n%4==1?break:n--;return n;}

Ini memungkinkan Anda untuk menggunakan if/ elseinline, seperti p=if(n>1)7else 4;, meskipun tentu saja p=n>1?7:4;lebih pendek.

Kata kunci yang tidak dapat Anda gunakan sebaris

  • var - Compiler akan mengeluh tentang mencoba menggunakan Void sebagai nilai.
  • for/ while- Sama seperti di atas, meskipun Anda dapat menggunakannya dalam pemahaman array .
Produksi ETH
sumber
1

Abaikan tanda kurung fungsi

Tidak seperti kebanyakan bahasa, semua yang ada di Haxe adalah ekspresi , termasuk {blocks}. Dengan demikian, kurung keriting di mana saja dalam program Haxe (dengan pengecualian switchekspresi) dapat dikesampingkan jika hanya berisi satu pernyataan. Jadi alih-alih ini:

function f(n){return Math.pow(3,n);}

Kamu bisa melakukan ini:

function f(n)return Math.pow(3,n);

Dua byte mudah disimpan pada banyak fungsi.

Bahkan jika suatu fungsi harus mengandung banyak pernyataan, Anda dapat sering menyimpan byte dengan memindahkan return blok di luar:

function f(a){var b=a*a;return a<0?-b:b;}
function f(a)return{var b=a*a;a<0?-b:b;}

Ini berfungsi karena blok mengevaluasi ekspresi terakhir di dalam blok.

Produksi ETH
sumber
Sunting: jika Anda membutuhkan kubus angka, lebih baik digunakan n*n*n, atau setara n*n*n*ndengan tesseract nomor, dll ... Namun, Math.powberfungsi sebagai contoh yang baik di sini.
Yytsi
@ TuukkaX Heh, terima kasih. Saya akan menggunakan Math.pow(3,n)sebagai gantinya ;-)
ETHproduk