Kiat untuk bermain golf kode di C #


62

Apa tips umum yang Anda miliki untuk bermain golf di C #? Saya mencari ide yang dapat diterapkan pada masalah kode golf secara umum yang setidaknya agak spesifik untuk C # (mis. "Hapus komentar" bukan jawaban). Silakan kirim satu tip per jawaban.

- dipinjam dari ide marcog;)


TIP TERBAIK => Gunakan sesuatu di samping .NET jika Anda tidak ingin mengirimkan jawaban terlama untuk tantangan. .NET dirancang untuk sangat verbose dan untuk membiarkan IDE melakukan pengetikan. Yang sebenarnya tidak seburuk kedengarannya untuk pemrograman umum selama Anda memiliki kruk IDE tetapi untuk golf kode strategi itu pasti gagal.
krowe

Maafkan saya untuk gambar kalender, hanya itu yang bisa saya temukan dalam waktu singkat.
undergroundmonorail

Jawaban:


59

Alih-alih menggunakan .ToString()digunakan +""untuk numerik dan jenis lain yang dapat dilemparkan ke string secara aman.

.ToString() <-- 11 chars
+""         <--  3 chars

5
Ini juga berfungsi di JS.
Cyoce

1
Ini biasanya sebenarnya 5 karakter jika Anda perlu menggunakan string setelahnya untuk memasukkan kawat gigi ...(1+"").DoSomethingWith1String();
TheLethalCoder

1
Jika Anda membutuhkan string, Anda biasanya menyimpannya. Hampir semua penggunaan lainnya dapat menyimpulkan ToString () ...
jcolebrand

1
Perhatikan bahwa ini sebenarnya memanggil statis String.Concat(object)dengan argumen, daripada panggilan virtual object.ToString(). Concatsecara eksplisit mengkonversi nullke string kosong ( lihat sumber referensi ). Tidak ada 'casting asli' yang terjadi, Anda dapat mengonversi sesuatu seperti ini, hanya saja hasilnya mungkin tidak terlalu berguna dalam beberapa kasus! (tetapi perilaku null mungkin).
VisualMelon

1
Alternatif - interpolasi string :$"{n}"
Andriy Tolstoy

41

Saya pernah sengaja menempatkan program saya namespace Systemsehingga saya dapat mempersingkat akses ke kelas tertentu. Membandingkan

using System;using M=System.Math;

untuk

namespace System{using M=Math;

9
Hanya ingat bahwa lebih baik untuk sepenuhnya memenuhi syarat kelas / fungsi ketika satu penggunaan memecahkan masalah. Ini hanya berguna jika Anda harus memanggil sesuatu lebih dari sekali, dan itupun hanya untuk item di Systemnamespace.
Nick Larsen

Anda juga bisa melakukannya using System;class P....
ldam

@Logan: Ini bukan hanya tentang using System;tetapi juga tentang memiliki alias untuk kelas di namespace yang sama, yang lebih pendek seperti yang saya tunjukkan di sini.
Joey

Bahkan lebih singkat untuk dilakukan using static System.Math;di C # 6 (tambahkan Anda dapat menggunakan salah satu dari fungsi-fungsi itu seolah-olah mereka benar-benar global - bukan di kelas). Saran asli mungkin masih lebih pendek daripada using staticjika Anda perlu mengakses beberapa kelas.
susu

@milk: statickata kunci tambahan sering kali lebih lama daripada penghematan untuk tidak M.menggunakan pemanggilan metode, tapi ya, itu adalah pilihan, tetapi ia datang dengan biaya dimuka yang besar dan membutuhkan banyak panggilan untuk diamortisasi.
Joey

30

Gunakan varuntuk mendeklarasikan dan menginisialisasi variabel (tunggal) untuk menyimpan karakter pada tipe:

string x="abc";

menjadi

var x="abc";

intTentu saja tidak diperlukan .


2
Ingat bahwa vartidak dapat memiliki beberapa deklarator, misalnya var x="x",y="y";tidak mungkin.
Ian H.

29

Jika menggunakan LINQ, Anda dapat meneruskan metode secara langsung Selectdaripada membuat lambda.

Jadi, bukannya

foo.Select(x=>int.Parse(x))

Anda dapat gunakan

foo.Select(int.Parse)

langsung.

(Ditemukan baru-baru ini ketika memperbaiki salah satu jawaban C # Timwi .)


2
FWITW ini disebut η-reduction
ThreeFx

Ini juga dikenal sebagai gaya "point point"
Jonathan Wilson

5
Untuk yang lebih pragmatis dari kita, itu hanya lebih pendek : -þ
Joey

23

Ingatlah bahwa program kompilasi terkecil di C # adalah 29 karakter:

class P
{
    static void Main()
    {   
    }
}

Jadi mulailah dengan menghapus itu dari panjang Anda dan menilai jawaban Anda pada berapa banyak yang dibutuhkan. C # tidak dapat bersaing dengan bahasa lain dalam hal mencetak atau membaca input, yang merupakan jantung dari sebagian besar [code-golf]masalah, jadi jangan khawatir tentang itu. Sebagai pegolf C #, Anda benar-benar bersaing melawan bahasa.

Beberapa hal lain yang perlu diingat:

  • Kurangi semua loop dan ifpernyataan ke satu baris jika memungkinkan untuk menghapus tanda kurung.
  • Jika diberi opsi antara stdin dan baris perintah, selalu gunakan baris perintah!

Ini biasanya melibatkan terner juga;)
jcolebrand

1
As a C# golfer, you're really competing against the language
Berhubungan luar

1
Sebenarnya itu tidak benar. Ini mengkompilasi menggunakan static int Main()juga, yang akan menjadi 28 karakter.
Metoniem


21

Dari pada

bool a = true;
bool b = false;

melakukan

var a=0<1;
var b=1<0;

Jika Anda memerlukan banyak variabel, gunakan ini (disarankan oleh @VisualMelon )

bool a=0<1,b=!a;

Perhatikan bahwa jika Anda memerlukan beberapa variabel dari jenis yang sama, biasanya lebih murah untuk mendeklarasikan tipe a koma pisahkan deklarasibool a=0<1,b=!a;
VisualMelon

18

Mendukung operator ternary lebih dari if.. elseblok mana yang sesuai.

Sebagai contoh:

if(i<1)
    j=1;
else
    j=0;

lebih efisien:

j=i<1?1:0;

15
Apakah saya satu-satunya yang merasa bahwa kasus kedua secara inheren lebih mudah dibaca untuk hal-hal seperti ini secara umum? Saya melakukan itu secara rutin. Selain itu, jika saya perlu menghindari kondisi nol (seperti pada string) saya melakukan sesuatu seperti var x = input ?? "";(Saya suka
persatuan

Ada saat-saat itu jauh dari pilihan yang lebih mudah dibaca, terutama ketika i < 1pernyataan yang kompleks atau ketika nama jpanjang. IMO, ternyata juga gagal menyampaikan efek samping dengan sangat baik. Dalam kasus di mana if (i < 1)ada sesuatu seperti if (SendEmail(recipient))yang mengembalikan benar / salah tergantung pada keberhasilan efek samping, saya lebih suka notasi if / then.
Nick Larsen

11
Tidak perlu tanda kurung dalam kasus kedua - j=i<1?1:0;sudah cukup.
Danko Durbić

3
Pertanyaannya menanyakan tips yang agak spesifik untuk C #. Ini termasuk dalam tips untuk semua bahasa .
Peter Taylor

4
@PeterTaylor Saya menjawab pertanyaan ini lebih dari 3 tahun yang lalu, jauh sebelum utas yang Anda
tautkan

15

Penggunaan penggunaan yang efektif

Anda dapat mengganti float (yang merupakan alias untuk System.Single) dengan zmenggunakanz=System.Single;

Kemudian ganti z=System.Single;dengan z=Single;dengan menempatkan program di namespace System. (Seperti dengan jawaban Joey)

Ini dapat diterapkan untuk tipe nilai lainnya (gunakan apa yang mereka alias), struct dan kelas


14

Jika Anda perlu menggunakan Console.ReadLine()beberapa kali dalam kode Anda (minimal 3 kali), Anda dapat melakukan:

Func<string>r=Console.ReadLine;

dan kemudian gunakan saja

r()

sebagai gantinya


Saya pikir Anda perlu menghapus ()dari baris pertama.
mellamokb

@ellamokb benar, terima kasih! tetap.
Cristian Lupascu

1
Tidak bisa Anda lakukan auto r=Console.ReadLine;?
Claudiu

2
@claudiu no, sayangnya bukan ideone.com/jFsVPX
Cristian Lupascu

@Claudiu, autoadalah C++kata kerja. varadalah untuk C#. Alasan ini tidak dapat dilakukan adalah karena Console.ReadLinekelebihan beban sehingga tanda tangan fungsi perlu ditentukan untuk memberi tahu kompiler mana kelebihan beban yang diinginkan.
GreatAndPowerfulOz

14

Saat membaca setiap karakter argumen baris perintah, alih-alih merangkak ke panjang string:

static void Main(string[]a){
    for(int i=0;i<a[0].Length;)Console.Write(a[0][i++]);
}

Anda dapat menyimpan karakter dengan menggunakan blok coba / tangkap untuk menemukan akhir:

static void Main(string[]a){
    try{for(int i=0;;)Console.Write(a[0][i++]);}catch{}
}

Ini berlaku untuk sembarang array dalam array seperti:

  • string[]
  • int[][]
  • IList<IList<T>>

7
Itu benar-benar mengerikan ... Saya menyukainya!
Alex Reinking

omong kosong ini jenius, saya sebenarnya baru saja menyelamatkan karakter sambil mengulang array
Gaspa79

Ini benar-benar jahat!
GreatAndPowerfulOz

13

Gunakan lambdas untuk mendefinisikan fungsi dalam C # 6

Di C # 6, Anda bisa menggunakan lambda untuk mendefinisikan fungsi:

int s(int a,int b)=>a+b;

Ini lebih pendek daripada mendefinisikan fungsi seperti ini:

int s(int a,int b){return a+b;}

3
C # 6 memberikan berbagai kemampuan baru untuk kode-golf
jcolebrand

Di C # 7, ini bisa dilakukan di dalam fungsi lain untuk membuat fungsi lokal. Saya ragu ini akan membantu saat bermain golf, tapi itu masih trik yang perlu diketahui.
TehPers

1
Itu tidak secara resmi lambda. Itu anggota bertubuh ekspresi .
rekursif

13

LINQ

Alih-alih menggunakan:

Enumerable.Range(0,y).Select(i=>f(i))

untuk mendapatkan Enumerable dengan hasil dari fungsi funtuk setiap intdi [0,y]Anda dapat menggunakan

new int[y].Select((_,i)=>f(i))

jika Anda membutuhkan stringatau apa pun yang mengimplementasikan Enumerabledalam program Anda, Anda dapat menggunakannya juga

var s="I need this anyway";
s.Select((_,i)=>f(i))

Saya menggunakan trik ini dalam jawaban saya untuk tantangan Berbagi Rahasia Shamir .
aloisdg mengatakan Reinstate Monica

Saya tidak berpikir bahwa bagian string akan dieksekusi jika Anda tidak mengulangi ienumerable dengan optimasi. Hanya gagal untuk saya sampai saya melakukannya. ToArray () ;. Selain itu, tip yang luar biasa!
Gaspa79

Ya enumerables malas tapi itu berlaku untuk ketiga contoh bukan hanya satu dengan string.
Ragy

11

Jika Anda perlu menggunakan generik Dictionary<TKey, TValue>setidaknya dua kali dalam kode Anda, Anda bisa mendeklarasikan kelas kamus, seperti dalam contoh ini:

class D:Dictionary<int,string>{}

dan kemudian gunakan saja

D d=new D{{1,"something"},{2,"something else"}};

bukannya mengulangi Dictionary<int,string>untuk setiap instantiation.

Saya telah menggunakan teknik ini dalam jawaban ini


2
Dan juga "D d" bukannya "var d"
Zukki

@Zukki Jelas! Apa yang kupikirkan? :)
Cristian Lupascu

1
Alternatif:using D = System.Collections.Generic.Dictionary<int,string>;
Andriy Tolstoy

10

Anda dapat menggunakan floatdan doubleliteral untuk menyimpan beberapa byte.

var x=2.0;
var y=2d;         // saves 1 byte

Ketika Anda membutuhkan intaritmatika untuk mengembalikan floatatau doubleAnda dapat menggunakan literal untuk memaksa konversi.

((float)a+b)/2;  // this is no good
(a+b)/2.0;       // better
(a+b)/2f;        // best      

Jika Anda pernah mengalami situasi di mana Anda harus melakukan cast, Anda dapat menyimpan beberapa byte dengan menggunakan multiplikasi sebagai gantinya.

((double)x-y)/(x*y);
(x*1d-y)/(x*y);      // saves 5 bytes

Bahkan lebih pendek:(x-y)*1d/x/y;
rekursif

9

Ingat di mana privat atau publik melekat, seperti berikut ini:

class Default{static void Main()

jika dibandingkan dengan

public class Default { public static void Main()

5
Dan selalu buat kelas satu huruf saja :-)
Joey

2
Oh, dan satu lagi yang menyenangkan, tersirat di sini: misalnya Main, tidak perlu argumen yang berbeda dengan Java.
Joey

@ Joey: dan juga tidak perlu untuk umum.
R. Martinho Fernandes

1
@martinho ~ apakah Anda membaca jawaban saya? ;) tidak ada publik pada main
jcolebrand

@ Joey ~ Saya mencoba untuk menyimpannya pada satu per posting;) ... mengira orang lain akan memposting tentang utama atau kelas hanya menjadi satu huruf. Melihat bagaimana tidak ada orang lain, saya akan melanjutkan dan menambahkan yang juga.
jcolebrand

9

Untuk ekspresi lambda satu-baris, Anda dapat melewati tanda kurung dan titik koma. Untuk ekspresi satu-parameter, Anda dapat melewati tanda kurung.

Dari pada

SomeCall((x)=>{DoSomething();});

Menggunakan

SomeCall(x=>DoSomething);

11
Saya tidak pernah menulis tanda kurung untuk lambdas satu-parameter, bahkan pada kode produksi.
R. Martinho Fernandes

Saya selalu menggunakan tanda kurung karena saya suka membagi lambda menjadi beberapa baris agar mudah dibaca.
Juliana Peña

3
SomeCall(DoSomething)bahkan lebih baik
GreatAndPowerfulOz

9

Looping:

Deklarasi variabel:

int max;
for(int i=1;i<max;i++){
}

menjadi:

int max,i=1;
for(;i<max;i++){
}

Dan jika Anda perlu atau bekerja dengan variabel i hanya sekali, Anda bisa mulai dari -1 (atau 0 tergantung pada keadaan loop) dan kenaikan sebaris:

int max,i=1;
for(;i<max;i++){
  Console.WriteLine(i);
}

untuk

int max,i=1;
for(;i<max;){
  Console.WriteLine(++i);
}

Dan itu berkurang satu karakter, dan sedikit mengaburkan kode juga. Hanya lakukan itu pada ireferensi PERTAMA , seperti: (diberikan optimasi satu karakter tidak banyak, tetapi mereka dapat membantu)

int max,i=1;
for(;i<max;i++){
  Console.WriteLine(i + " " + i);
}

untuk

int max,i=1;
for(;i<max;){
  Console.WriteLine(++i + " " + i);
}

ketika loop tidak harus bertambah i(loop urutan terbalik):

for(int i=MAX;--i>0;){
      Console.WriteLine(i);
}

Saya biasanya menempatkan ++dalam kasus seperti itu langsung ke header loop: for(;++i<max;)yang lebih mudah diikuti dan lebih sulit untuk salah.
Joey

@ Joey Dalam kasus itu saya cenderung beralih ke while (++ i <max) yang panjangnya sama tetapi lebih mudah dibaca.
ICR

ICR: tergantung pada apakah Anda dapat memasukkan pernyataan lain (sebelumnya) ke forheader juga, yang kemudian akan menyimpan karakter lagi.
Joey

Anda dapat memindahkan kedua deklarasi kembali ke klausa for untuk penghematan 1 byte.
rekursif

Saya suka berganti for(;i<max;)ke while(i<max). Jumlah byte yang sama, tetapi bagi saya itu hanya terlihat lebih bersih.
Ayb4btu

8

Ada keadaan ketika parameter output dapat menyimpan karakter. Inilah contoh yang sedikit dibuat-buat, algoritma skor bowling 10 pin.

Dengan pernyataan pengembalian:

........10........20........30........40........50........60........70........80........90.......100.......110.......120.......130.......140.......150..
public double c(int[]b){int n,v,i=0,X=10;double t=0;while(i<19){n=b[i]+b[i+1];v=b[i+2];t+=(n<X)?n:X+v;if(b[i]>9)t+=b[i+(i>16|v!=X?3:4)];i+=2;}return t;}

Dan dengan parameter output:

........10........20........30........40........50........60........70........80........90.......100.......110.......120.......130.......140.......
public void d(int[]b,out double t){int n,v,i=0,X=10;t=0;while(i<19){n=b[i]+b[i+1];v=b[i+2];t+=(n<X)?n:X+v;if(b[i]>9)t+=b[i+(i>16|v!=X?3:4)];i+=2;}}

Parameter output di sini menyimpan total 5 karakter.


8

Dalam C #, kami tidak diizinkan melakukan if(n%2)untuk memeriksa apakah nnomor genap. Jika kita lakukan, kita mendapatkan cannot implicity convert int to bool. Penanganan naif akan dilakukan:

if(n%2==0)

Cara yang lebih baik adalah menggunakan:

if(n%2<1)

Saya menggunakan ini untuk mendapatkan satu byte di sini .

perhatikan bahwa ini hanya berfungsi untuk angka positif, karena -1%2==-1dianggap bahkan dengan metode ini.


6

Interpolasi String

Peningkatan hemat-ruang yang sangat sederhana adalah interpolasi. Dari pada:

string.Format("The value is ({0})", (method >> 4) + 8)

cukup gunakan $untuk inline expressions:

$"The value is ({(method >> 4) + 8})"

Ini, bersama dengan badan ekspresi baru di C # 6.0 harus membuat tantangan kalkulasi string sederhana cukup mudah di C #.


3
Perhatikan juga bahwa i+$" bottles of beer";lebih pendek dari $"{i} bottles of beer".
aloisdg mengatakan Reinstate Monica

1
@aloisdg Dalam kasus pertama itu Anda harus pergi $.
Metoniem

@Metoniem Memang! Aku membiarkannya karena dalam kasus {i}
asliku

@aloisdg Ahh, begitu. Ya, komentar rasa malu tidak dapat diedit :(
Metoniem

6

Gunakan C # lambda. Karena PPCG memungkinkan lambda untuk input / output, kita harus menggunakannya.

Metode C # klasik terlihat seperti ini:

bool Has(string s, char c)
{
    return s.Contains(c);
}

Sebagai lambda, kami akan menulis

Func<string, char, bool> Has = (s, c) => s.Contains(c);

Lambda anonim juga diizinkan:

(s, c) => s.Contains(c)

Hapus semua kebisingan dan fokus!

Memperbarui:

Kita bisa meningkatkan satu langkah lagi dengan currying sebagai @TheLethalCoder komentar:

s => c => s.Contains(c);

Contoh arus oleh @Felix Palmen: Bagaimana menghitung kunci WPA?

Ini akan sangat membantu ketika Anda memiliki tepat 2 parameter, maka variabel kosong yang tidak digunakan _akan lebih baik. Lihat meta pos tentang ini . Saya menggunakan trik ini di sini . Anda harus mengubah sedikit fungsinya. Contoh: Coba online!


1
Tidak yakin apakah itu di tempat lain dalam kiat tetapi untuk contoh ini Anda dapat menggunakan kari juga ...s=>c=>...
TheLethalCoder

@TheLethalCoder Memang kita bisa! Saya akan memperbarui jawabannya terima kasih!
aloisdg mengatakan Reinstate Monica

Bisakah Anda menggunakan pengurangan eta dalam kasus ini? Sesuatu seperti ini: s=>s.Contains.
corvus_192

Perhatikan bahwa jawaban C # dan Java dari varietas 'untyped lambda' tidak disukai, Anda mungkin ingin bergabung dengan diskusi di meta post ini . Alternatif yang disarankan adalah(string s,char c)=>s.Contains(c)
VisualMelon

Diskusi tentang fungsi
diketahui


5

The Computecontoh metode System.Data.DataTable, memungkinkan untuk mengevaluasi ekspresi string sederhana, misalnya:

C # (Visual C # Compiler) , 166 byte

namespace System.Data
{
    class P
    {
        static void Main()
        {
            Console.Write(new DataTable().Compute("30*2+50*5/4",""));
        }
    }
}

Cobalah online!

Tidak terlalu "golfy", tetapi kadang-kadang mungkin bermanfaat.


5

Bertukar dua variabel

Biasanya, untuk menukar dua variabel, Anda harus mendeklarasikan variabel sementara untuk menyimpan nilai. Ini akan terlihat seperti sesuatu di sepanjang baris ini:

var c=a;a=b;b=c;

Itu 16 byte! Ada beberapa metode pertukaran lainnya yang lebih baik.

//Using tuples
(a,b)=(b,a);
//Bitwise xoring 
a=a^b^(b=a);
//Addition and subtraction
a=a+b-(b=a);
//Multiplication and division
a=a*b/(b=a);

Tiga yang terakhir hanya berfungsi untuk nilai numerik, dan seperti yang ditunjukkan ASCII saja, dua yang terakhir mungkin menghasilkan pengecualian ArithmeticOverflow. Semua hal di atas adalah 12 byte, penghematan 4 byte dibandingkan dengan contoh pertama.


Hanya berlaku untuk angka, dan bahkan selain itu tupel dan risiko xor berjalan ke batas bilangan bulat dari Anda menerapkan ini ke bilangan bulat. Kadang-kadang, jenis nomor lainnya juga akan mengalami batasan
ASCII-hanya

4

Menggunakan LinqPad akan memberi Anda kemungkinan untuk menghapus semua overhead program karena Anda dapat menjalankan pernyataan secara langsung. (Dan itu harus sepenuhnya legal dalam codegolf ... Tidak ada yang mengatakan Anda memerlukan .exe)

Output dilakukan dengan menggunakan .Dump()metode ekstensi.


Dukungan .NetFiddle .Dump();)
aloisdg mengatakan Reinstate Monica

4

(Kasus khusus untuk mengetahui prioritas operator Anda !)

Gunakan %untuk pengurangan terbatas (agak) yang mengikat ketat. Ini dapat menghemat sepasang kurung di sekitar pengurangan, yang hasilnya ingin Anda gandakan atau bagi dengan sesuatu; tapi hati-hati, ini memiliki keterbatasan serius.

Dari pada

char b='5'; // b is some ASCII input
int a=(b-48)*c; // we want to find the numerical value of b, and multiply it by something ('0'==48)

Mempertimbangkan

char b='5'; // b is some ASCII input
int a=b%48*c; // only good for ASCII within 48 of '0' (positive only)!

Contoh:

'5'%'0'*2 -> 10
'5'%'0'*-1 -> -5
'5'%'0'/2 -> 2

Saya baru saja menemukan ini, dan saya merasa itu akan menjadi hal yang berharga untuk diingat setiap kali bekerja dengan ASCII di masa depan. (Saat ini saya bermain golf di suatu tempat di mana saya menggunakan ASCII untuk representasi numerik yang ringkas, tetapi perlu mengalikan dengan 1atau -1berdasarkan kondisi lain, dan ini bergaris 2 byte)


4

Jika Anda perlu memasukkan beberapa usings yang semuanya jatuh dari hierarki yang sama, seringkali lebih pendek untuk menggunakan yang terlama sebagai namespace:

using System;
using System.Linq;
//Some code

vs:

namespace System.Linq
{
    //Some code
}

3

Ditemukan malam ini "di parit" sambil meningkatkan beberapa kode golf ... jika Anda memiliki kelas untuk pemrosesan Anda, Anda dapat melakukan pekerjaan di konstruktor untuk menyimpan mendeklarasikan metode.

Saya menemukan ini sambil mengurangi aplikasi konsol - karena ada static void Main(), semua fungsi dan variabel harus dinyatakan statis. Saya membuat kelas bersarang dengan fungsi dan variabel anggota, dengan pekerjaan utama dilakukan di konstruktor. Ini juga menyimpan karakter dalam kode panggilan.

mis. Kelas dengan metode:

class a
{
    public void b()
    {
        new c().d("input");
    }
}
class c
{
    public void d(string e)
    {
        System.Console.Write(e.Replace("in", "out"));
    }
}

Kelas dengan pekerjaan di konstruktor:

class a
{
    public void b()
    {
        new c("input");
    }
}
class c
{
    public c(string e)
    {
        System.Console.Write(e.Replace("in", "out"));
    }
}

Contoh ini menyimpan 9 karakter.



3

Deklarasikan string kosong / cocok bersama-sama

Jika Anda perlu mendeklarasikan beberapa string kosong / cocok, Anda dapat menyimpan beberapa byte dengan yang berikut:

string a="";string b="";string c=""; // 36 bytes
var a="";var b="";var c="";          // 27 bytes
string a="",b="",c="";               // 22 bytes
string a="",b=a,c=a;                 // 20 bytes

Sayangnya var a="",b=a,c=a;ilegal, karenaimplicitly type variable cannot have multiple declarators


Bisakah Anda melakukannya var a=b=c=""di javascript?
corvus_192

@ corvus_192 nggak - sayangnya tidak.
Erresen
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.