Apakah ini situasi yang benar untuk menggunakan konstanta?


42

Jadi profesor saya memberikan umpan balik pada proyek yang saya kerjakan. Dia merapat beberapa tanda untuk kode ini:

if (comboVendor.SelectedIndex == 0) {
  createVendor cv = new createVendor();
  cv.ShowDialog();
  loadVendors();
}

Ini ada di dalam penangan "indeks yang diubah". Ini digunakan ketika pengguna ingin membuat vendor baru, opsi teratas saya (indeks 0, yang tidak pernah berubah) membuka dialog "Buat Vendor baru". Jadi isi kotak kombo saya akhirnya tampak seperti ini:

Create New Vendor...
Existing Vendor
Existing Vendor 2
Existing Vendor 3

Masalahnya adalah dengan kode baris pertama:

if (comboVendor.SelectedIndex == 0)

Dia mengklaim bahwa 0 harus berupa konstanta, dan benar-benar merapat pada saya karena itu. Dia mengklaim saya seharusnya tidak menggunakan literal dalam kode saya sama sekali.

Masalahnya, saya tidak mengerti mengapa saya ingin membuat kode itu dalam situasi itu konstan. Indeks itu tidak akan pernah berubah, juga bukan sesuatu yang perlu Anda ubah. Sepertinya pemborosan memori untuk menyimpan satu 0 dalam memori yang digunakan untuk situasi yang sangat spesifik dan tidak pernah berubah.


32
Dia bersikap dogmatis. Angka ajaib pada umumnya adalah hal yang baik untuk dihindari. Saya pikir -1, 0 dan 1 dapat dianggap pengecualian untuk aturan itu. Selain itu, konstanta seperti ini tidak akan mengambil lebih banyak ruang daripada angka 0.
Dave Mooney

23
@DaveMooney: Apakah Anda yakin tidak memiliki reaksi spontan di sini? Memang benar bahwa hal-hal seperti -1dalam str.indexOf(substr) != -1untuk " strmengandung substr" dibenarkan secara prefek. Tapi di sini, arti dari 0 tidak jelas (apa hubungannya dengan menciptakan vendor baru?) Atau benar-benar konstan (bagaimana jika cara membuat vendor baru berubah?).

62
Anda harus mempelajari aturan sebelum Anda bisa melanggar aturan
Ryathal

12
Saya mengalami kegagalan metode ini pada saya. Daftar itu diurutkan berdasarkan abjad. Saya menggunakan - - Buat baru - - sehingga tanda hubung akan menyortir indeks kode pertama dan keras 0 ke metode CreateNew. Kemudian seseorang menambahkan item yang dimulai dengan kutipan tunggal 'Item Saya' yang ada sebelum tanda hubung. Pengodean keras saya menyebabkan program mogok saat berikutnya daftar dimuat. Saya harus memodifikasi file data daftar secara manual untuk memulihkan data pelanggan.
Hand-E-Food

14
Anda dapat menggunakannya int.Zerosebagai gantinya untuk membuatnya senang :)
Paul Stovell

Jawaban:


90

Cara sebenarnya yang benar untuk melakukan ini dalam C # adalah dengan tidak bergantung pada pemesanan ComboItems sama sekali .

public partial class MyForm : Form
{
    private readonly object VENDOR_NEW = new object();

    public MyForm()
    {
        InitializeComponents();
        comboVendor.Items.Insert(0, VENDOR_NEW);
    }

    private void comboVendor_Format(object sender, ListControlConvertEventArgs e)
    {
        e.Value = (e.ListItem == VENDOR_NEW ? "Create New Vendor" : e.ListItem);
    }

    private void comboVendor_SelectedIndexChanged(object sender, EventArgs e)
    {
        if(comboVendor.SelectedItem == VENDOR_NEW)
        {
            //Special logic for selecting "create new vendor"
        }
        else
        {
            //Usual logic
        }
    }
}

22
Nah, jika ini adalah C #, Anda seharusnya tidak menggunakan ALL_CAPS untuk konstanta. Konstanta harus PascalCased - stackoverflow.com/questions/242534/…
Groky

4
@Groky: Mengapa ini penting? Siapa yang peduli tentang bagaimana ia menamai konstanta-konstanta itu? Ini 100% benar jika ia menggunakan ALL_CAPS secara konsisten untuk konstanta.
marco-fiset

4
@marcof: Ya, jika konstanta adalah bagian dari antarmuka publik maka ia harus mengikuti pedoman penamaan MS. Jika tidak, maka ia setidaknya harus belajar praktik terbaik sejak dini.
Groky

2
Ini masih salah. Ini menggeser masalah dari memiliki integer literal (nol) ke string literal (Buat Vendor Baru). Paling-paling masalahnya sekarang adalah 'bagaimana jika label berubah' alih-alih 'bagaimana jika indeks berubah'.
Freiheit

7
@Freiheit: Salah. Konstanta string di sini hanya untuk tampilan; itu tidak mempengaruhi logika program sama sekali. Tidak seperti menggunakan nilai-nilai / string ajaib untuk menyimpan status-program, mengubah string ini (atau menambah / menghapus hal-hal dari daftar) tidak pernah dapat memecahkan apa pun.
BlueRaja - Danny Pflughoeft

83

Urutan di kotak kombo bisa berubah. Bagaimana jika Anda menambahkan opsi lain seperti "Buat Vendor Khusus ..." sebelum "Buat Penjual Baru ..."

Keuntungan menggunakan konstanta adalah jika ada banyak metode yang bergantung pada urutan kotak kombo, Anda hanya perlu mengubah konstanta dan tidak semua metode jika ini memang berubah.

Menggunakan konstanta juga lebih mudah dibaca daripada literal.

if (comboVendor.SelectedIndex == NewVendorIndex)

Sebagian besar bahasa yang dikompilasi akan menggantikan konstanta pada waktu kompilasi, sehingga tidak ada penalti kinerja.


5
Saya akan menggunakan kode deskriptif dalam atribut nilai, daripada mengandalkan indeks yang dapat berubah (memindahkan opsi buat ke bagian bawah daftar, benar-benar akan merusak metode konstan). Kemudian cari kode itu.
CaffGeek

1
@Chad, saya setuju mengidentifikasi kontrol dengan perintah di gui sangat rapuh. Jika bahasa mendukung menambahkan nilai ke elemen gui yang dapat dicari, saya akan menggunakannya.
Michael Krussel

3
@ solusi karena itu adalah konvensi.
Ikke

3
@Ike Itu pasti bukan konvensi. stackoverflow.com/questions/242534/…
SolutionYogi

1
Jika kita berbicara tentang C # maka NewVendorIndex ADALAH konvensi. Ini konsisten dengan sisa gaya NET.
MaR

36

Situasi yang Anda gambarkan ini adalah panggilan penilaian, secara pribadi saya tidak akan menggunakannya jika hanya digunakan sekali dan sudah dapat dibaca.

Namun jawaban sebenarnya adalah bahwa dia memilih ini untuk memberi Anda pelajaran.

Jangan lupa bahwa dia adalah seorang profesor, tugasnya adalah mengajarkan Anda coding dan praktik terbaik.

Saya akan mengatakan dia melakukan pekerjaan yang cukup bagus sebenarnya.

Tentu dia mungkin terlihat agak absolut, tetapi saya yakin Anda akan berpikir lagi sebelum menggunakan angka ajaib.

Juga dia cukup di bawah kulit Anda untuk bergabung dengan komunitas online tentang programmer hanya untuk mencari tahu apa yang dianggap praktik terbaik dalam situasi ini.

Angkat topi untuk profesor Anda.


+1 untuk menunjukkan bahwa, dalam hal ini, cara membenarkan hasil akhir
oliver-clare

@ Thanos- " Jangan lupa bahwa dia adalah seorang profesor, tugasnya adalah mengajarimu coding dan praktik terbaik. " Ini tidak pernah terjadi pada profesor saya. Saya akan mengatakan tugasnya adalah untuk mengajarkan Anda apa yang dirasakan departemen itu penting setelah kursus dibuat.
Ramhound

13

[...] opsi teratas saya (indeks 0, yang tidak pernah berubah) membuka dialog "Buat Vendor baru".

Fakta bahwa Anda harus menjelaskan itu membuktikan mengapa Anda harus menggunakan konstanta. Jika Anda memperkenalkan konstanta seperti NEW_VENDOR_DIALOG, kode Anda akan lebih jelas. Selain itu, kompiler mengoptimalkan konstanta, sehingga tidak akan ada perubahan dalam kinerja.

Tulis program untuk pemrogram, bukan kompiler. Kecuali jika Anda secara khusus mencoba mengoptimalkan mikro, yang tampaknya tidak seperti Anda.


2
-1 bahkan menyebutkan kinerja. Bahkan jika tidak dioptimalkan komputer dapat melakukan miliaran operasi seperti ini sebelum pemberitahuan pengguna.
Boris Yankov

3
@Boris OP tampak khawatir tentang pemborosan sumber daya, itulah sebabnya saya menyebutkannya. Saya tidak melihat bagaimana jawaban saya menjadi kurang tepat karena itu.
kba

12

Dia mengklaim bahwa 0 harus berupa konstanta, dan benar-benar merapat pada saya karena itu.

Saya setuju. Penggunaan nol di sini adalah "sihir". Bayangkan Anda membaca kode ini untuk pertama kalinya. Anda tidak tahu mengapa nol itu istimewa, dan literal tidak memberi tahu Anda mengapa nol itu istimewa. Jika sebaliknya Anda berkata if(comboVendor.SelectedIndex == CreateNewVendorIndex)maka menjadi sangat jelas bagi pembaca pertama kali apa arti kode tersebut.

Dia mengklaim saya seharusnya tidak menggunakan literal dalam kode saya sama sekali.

Itu posisi yang ekstrem; posisi yang realistis adalah untuk mengatakan bahwa penggunaan literal adalah bendera merah yang menunjukkan bahwa kode mungkin tidak sejelas mungkin. Terkadang itu tepat.

Masalahnya, saya tidak mengerti mengapa saya ingin membuat kode itu dalam situasi itu konstan. Indeks itu tidak akan pernah berubah

Bahwa itu tidak akan pernah berubah adalah alasan yang bagus untuk membuatnya konstan . Itu sebabnya konstanta disebut konstanta; karena mereka tidak pernah berubah.

juga bukan sesuatu yang perlu Anda ubah.

Sangat? Anda tidak dapat melihat setiap situasi di mana seseorang mungkin ingin mengubah urutan hal-hal dalam kotak combo?

Fakta bahwa Anda dapat melihat alasan mengapa ini mungkin berubah di masa depan adalah alasan yang baik untuk tidak menjadikannya konstan. Alih-alih itu harus berupa bidang bilangan bulat statis tidak-baca yang konstan. Konstanta harus berupa kuantitas yang dijamin tetap sama untuk sepanjang masa . Pi dan jumlah atom emas adalah konstanta yang baik. Nomor versi tidak; mereka mengubah setiap versi. Harga emas jelas merupakan konstanta yang mengerikan; itu berubah setiap detik. Hanya membuat hal-hal konstan yang tidak pernah berubah .

Sepertinya pemborosan memori untuk menyimpan satu 0 dalam memori yang digunakan untuk situasi yang sangat spesifik dan tidak pernah berubah.

Sekarang kita sampai pada inti permasalahan.

Ini mungkin adalah baris paling penting dalam pertanyaan Anda karena ini menunjukkan bahwa Anda memiliki pemahaman yang sangat cacat tentang (1) memori, dan (2) optimasi. Anda di sekolah untuk belajar, dan sekarang akan menjadi saat yang tepat untuk mendapatkan pemahaman yang benar tentang dasar-dasarnya. Bisakah Anda jelaskan secara terperinci mengapa Anda percaya bahwa "itu adalah pemborosan memori untuk menjaga satu nol dalam memori"? Pertama, mengapa Anda percaya bahwa mengoptimalkan penggunaan empat byte memori dalam proses dengan setidaknya dua miliar byte penyimpanan yang dapat dialamatkan oleh pengguna relevan? Kedua, tepatnya sumber daya apa yang Anda bayangkan sedang dikonsumsi di sini ? Apa yang Anda maksud dengan "memori" yang dikonsumsi?

Saya tertarik pada jawaban atas pertanyaan-pertanyaan ini pertama karena itu adalah kesempatan bagi Anda untuk belajar bagaimana pemahaman Anda tentang optimasi dan manajemen memori tidak benar, dan kedua karena saya selalu ingin tahu mengapa pemula percaya hal-hal aneh, sehingga saya dapat merancang alat yang lebih baik untuk memimpin mereka untuk memiliki keyakinan yang benar.


6

Dia benar. Kamu benar. Anda salah.

Dia benar, secara konseptual, bahwa angka ajaib harus dihindari. Konstanta membuat kode lebih mudah dibaca dengan menambahkan konteks pada arti angka tersebut. Di masa mendatang ketika seseorang membaca kode Anda, mereka tahu mengapa nomor tertentu digunakan. Dan jika Anda perlu mengubah nilai di suatu tempat di telepon, jauh lebih baik untuk mengubahnya di satu tempat daripada mencoba memburu di mana-mana di mana nomor tertentu digunakan.

Yang sedang berkata, Anda benar. Dalam kasus khusus ini, saya benar-benar tidak berpikir konstanta dijamin. Anda mencari item pertama dalam daftar, yang selalu nol. Tidak akan pernah menjadi 23. Atau -pi. Anda secara khusus mencari nol. Saya benar-benar tidak berpikir Anda perlu mengacaukan kode dengan membuatnya konstan.

Anda salah, meskipun, dengan asumsi konstanta dibawa-bawa sebagai variabel, 'menggunakan memori'. Sebuah konstanta ada untuk manusia dan kompiler. Ini memberitahu kompiler untuk meletakkan nilai itu di tempat itu selama kompilasi, di mana Anda seharusnya meletakkan angka literal. Dan bahkan jika itu membawa konstan dalam memori, untuk semua kecuali aplikasi yang paling menuntut, hilangnya efisiensi bahkan tidak bisa diukur. Khawatir tentang penggunaan memori integer tunggal pasti jatuh ke 'optimasi prematur'.


1
Saya hampir memilih jawaban ini, jika bukan untuk paragraf ketiga, mengklaim bahwa menggunakan 0 literal sudah cukup jelas dan tidak ada konstanta yang dijamin. Solusi yang jauh lebih baik adalah tidak bergantung pada pengindeksan item kotak kombo sama sekali, melainkan pada nilai item yang dipilih sebagai gantinya. Konstanta ajaib adalah konstanta ajaib bahkan jika itu 0 atau 3.14 atau yang lainnya - sebutkan dengan tepat karena ini membuat kode lebih mudah dibaca.
Roland Tepp

Mungkin lebih baik menggunakan nilai dalam daftar, tetapi bukan itu pertanyaannya. Pertanyaannya adalah tentang apakah itu penggunaan yang tepat untuk sebuah konstanta. Dan jika seseorang membandingkan dengan 0 dalam konteks berinteraksi dengan GUI (untuk alasan apa pun - mungkin seseorang mencari item tinju terlepas dari nilai), saya pikir itu tidak perlu menggunakan konstanta di tempat itu.
GrandmasterB

Saya tidak akan setuju ... Dari hanya melihat kode, tidak pernah langsung jelas apa pentingnya 0 - itu mungkin benar-benar bahwa ia selalu mencari item pertama dalam daftar dan hanya itu, tapi kemudian akan membaca lebih bersih, jika perbandingannya adalah 'comboVendor.SelectedIndex == FirstIndex' sebagai gantinya?
Roland Tepp

2

Saya akan mengganti 0dengan konstanta untuk memperjelas artinya, seperti NewVendorIndex. Anda tidak pernah tahu apakah pesanan Anda akan berubah.


1

Itu adalah preferensi total profesor Anda. Biasanya, Anda hanya menggunakan konstanta jika literal akan digunakan beberapa kali, Anda ingin memperjelas kepada pembaca apa tujuan dari baris tersebut, atau literal Anda mungkin akan berubah di masa depan, dan Anda hanya ingin mengubah di satu tempat. Namun, untuk semester ini, profesor adalah bos, jadi saya akan melakukannya mulai sekarang di kelas itu.

Pelatihan yang bagus untuk dunia usaha? Sangat Mungkin.


2
Saya tidak setuju dengan bagian "hanya gunakan konstanta jika literal akan digunakan beberapa kali". Dengan 0 (dan mungkin -1, 1) seringkali jelas, dalam banyak kasus lebih baik memberi nama pada suatu hal yang jauh lebih jelas daripada membaca kode.
johannes

1

Sejujurnya, sementara saya tidak berpikir kode Anda adalah praktik terbaik, sarannya terus terang sedikit aneh.

Praktik yang lebih umum untuk .NET combobox adalah memberikan item "Pilih .." nilai kosong, sedangkan item sebenarnya memiliki nilai yang bermakna, lalu lakukan:

if (string.IsNullOrEmpty(comboVendor.SelectedValue))

daripada

if (comboVendor.SelectedIndex == 0)

3
Dalam contoh Anda, null hanyalah literal lain. Inti dari pelajaran ini adalah bahwa literal harus dihindari.
overslacked

@overslacked - Tidak ada null literal dalam contoh saya.
Carson63000

Bahkan jika ada null literal, null adalah literal yang dapat diterima untuk digunakan, saya bahkan tidak percaya ada cara untuk memeriksa apakah referensi ke suatu objek adalah null tanpa menggunakan pengecekan apakah itu sama dengan nol.
Ramhound

Carson63000 - Saya merujuk pada penggunaan IsNullOrEmpty. Anda menukar satu "nilai ajaib" dengan yang lain. @Ramhound - Null adalah literal yang dapat diterima dalam beberapa kasus, tidak ada pertanyaan, tapi saya tidak percaya ini adalah contoh yang baik (menggunakan null atau kosong sebagai nilai ajaib).
overslacked

-1 untuk "sedikit aneh". Meskipun Anda benar bahwa menggunakan nilai akan lebih konvensional dan lebih mudah dipahami, jika menggunakan indeks yang dipilih, menggunakan konstanta bernama pasti lebih baik daripada hanya 0.
jmoreno

1

Dia tidak salah untuk menekankan nilai menggunakan konstanta dan Anda tidak salah dalam menggunakan literal. Kecuali dia telah menekankan bahwa ini adalah gaya pengkodean yang diharapkan, Anda tidak boleh kehilangan nilai karena menggunakan literal karena mereka tidak berbahaya. Saya telah melihat literal yang digunakan di semua tempat berkali-kali dalam kode komersial.

Maksudnya bagus. Ini mungkin caranya agar Anda mengetahui manfaat konstanta:

1-Mereka melindungi kode Anda sampai batas tertentu dari gangguan yang tidak disengaja

2-Seperti @DeadMG mengatakan dalam jawabannya, jika nilai literal yang sama digunakan di banyak tempat itu mungkin muncul dengan nilai yang berbeda secara tidak sengaja - Jadi konstanta menjaga konsistensi.

3-Constants mempertahankan tipe, jadi Anda tidak perlu menggunakan sesuatu seperti 0F berarti nol.

4-Untuk kemudahan membaca, COBOL menggunakan NOL sebagai kata yang disediakan untuk nilai nol (tetapi juga memungkinkan Anda untuk menggunakan nol literal) - Jadi, memberi nilai nama kadang-kadang bermanfaat, misalnya: (Sumber: ms-Konstants

class CalendarCalc
{
    const int months = 12;
    const int weeks = 52; //This is not the best way to initialize weeks see comment
    const int days = 365;

    const double daysPerWeek = (double) days / (double) weeks;
    const double daysPerMonth = (double) days / (double) months;
}

atau seperti dalam kasus Anda (seperti yang ditunjukkan pada jawaban @Michael Krussel)


2
Bukankah itu akan menjadi definisi aneh untuk hari per minggu? Ada 7 hari seminggu bukan 7.4287143
Winston Ewert

@ WinstonEwert, terima kasih atas komentar Anda. 365/52 = 7.01923076923077 = 7 + (1/52). Sekarang, jika Anda menghapus bagian pecahan dan menghitung 7 * 52 Anda mendapatkan 364 hari yang bukan jumlah hari yang benar dalam setahun. Memiliki pecahan lebih akurat daripada kehilangannya (karena Anda dapat memformat hasil untuk menampilkan 7 jika Anda hanya ingin menampilkan nomornya). Bagaimanapun, itu hanya sebuah contoh dari MS tentang konstanta, tetapi poin Anda menarik.
NoChance

1
Tentu saja ini hanya contoh, tapi saya keberatan dengan pernyataan Anda yang lebih akurat untuk memasukkan fraksi. Satu minggu didefinisikan sebagai 7 hari. Dengan definisi Anda, 26 minggu adalah 182,5 hari yang tidak akurat. Sungguh, masalahnya adalah Anda int weeks = 52, tidak ada 52 minggu per tahun. Ada 52.142857142857146 minggu dalam setahun, dan itulah angka yang harus Anda pertahankan. Tentu saja, satu-satunya hal yang benar-benar konstan di seluruh rangkaian konstanta itu adalah jumlah bulan.
Winston Ewert

0

Anda hanya perlu meletakkannya dalam konstanta jika memiliki derivasi yang kompleks, atau jika sering diulang. Lain, literal baik-baik saja. Menempatkan segala sesuatu dalam sebuah konstanta adalah total berlebihan.


Hanya jika Anda mempertimbangkan dua kali lebih sering dan Anda tidak perlu mengubah kode. Sangat mudah untuk membuat bug dengan mengubah satu dari dua case.
BillThor

0

Sebenarnya, seperti yang disebutkan, bagaimana jika posisinya berubah? Apa yang bisa / harus Anda lakukan adalah menggunakan kode, daripada mengandalkan indeks.

Jadi, ketika Anda membuat daftar pilih Anda berakhir dengan seperti html

<select>
    <option value='CREATE'>Create New Vendor...</option>
    <option value='1'>Existing Vendor</option>
    <option value='2'>Existing Vendor 2</option>
    <option value='3'>Existing Vendor 3</option>
</select>

Kemudian, alih-alih memeriksa selectedIndex === 0, periksa bahwa nilainya adalah CREATECODEdalam konstanta dan akan digunakan untuk kedua tes ini, dan saat membuat daftar pilih.


3
Mungkin pendekatan yang bagus, tetapi karena dia menggunakan C #, html bukan contoh kode yang paling penuh harapan.
Winston Ewert

0

Saya akan menyingkirkannya sama sekali. Masukkan saja tombol buat di sebelah daftar kotak kombo. Klik dua kali item dalam daftar untuk mengedit, atau klik tombol. Tidak memiliki fungsi baru yang terkubur dalam kotak kombo. Kemudian angka ajaib dihapus sama sekali.

Secara umum setiap angka literal dalam kode harus didefinisikan sebagai konstanta untuk menempatkan konteks di sekitar angka tersebut. Apa artinya nol? Dalam hal ini 0 = NEW_VENDOR. Dalam kasus lain, itu mungkin berarti sesuatu yang berbeda, jadi itu selalu merupakan ide yang baik untuk keterbacaan dan pemeliharaan untuk menempatkan beberapa konteks di sekitarnya.


0

Seperti yang orang lain katakan, Anda harus menggunakan beberapa metode selain nomor indeks untuk mengidentifikasi item kotak kombo yang sesuai dengan tindakan yang diberikan; atau, Anda dapat menemukan indeks dengan beberapa logika program dan menyimpannya dalam sebuah variabel.

Alasan saya menulis adalah untuk menanggapi komentar Anda tentang "penggunaan memori". Dalam C #, seperti dalam kebanyakan bahasa, konstanta "dilipat" oleh kompiler. Misalnya, kompilasi program berikut, dan periksa IL. Anda akan menemukan bahwa semua angka itu bahkan tidak membuatnya menjadi IL, apalagi memori komputer:

public class Program
{
    public static int Main()
    {
        const int a = 1000;
        const int b = a + a;
        const int c = b + 42;
        const int d = 7928345;
        return (a + b + c + d) / (-a - b - c - d);
    }
}

IL yang dihasilkan:

.method public hidebysig static 
    int32 Main () cil managed 
{
    .maxstack 1
    .locals init (
        [0] int32 CS$1$0000
    )

    IL_0000: nop
    IL_0001: ldc.i4.m1  // the constant value -1 to be returned.
    IL_0002: stloc.0
    IL_0003: br.s IL_0005

    IL_0005: ldloc.0
    IL_0006: ret
}

Jadi, apakah Anda menggunakan konstanta, literal, atau satu kilobita kode menggunakan aritmatika konstan, nilainya diperlakukan secara harfiah dalam IL.

Poin terkait: Pelipatan konstan berlaku untuk string literal. Banyak yang percaya bahwa panggilan seperti ini menyebabkan penggabungan string yang tidak perlu dan tidak efisien:

public class Program
{
    public static int Main()
    {
        const string a = "a";
        const string b = a + a;
        const string c = "C";
        const string d = "Dee";
        return (a + b + c + d).Length;
    }
}

Tapi lihat IL:

IL_0000: nop
IL_0001: ldstr "aaaCDee"
IL_0006: callvirt instance int32 [mscorlib]System.String::get_Length()
IL_000b: stloc.0
IL_000c: br.s IL_000e
IL_000e: ldloc.0
IL_000f: ret

Intinya: Operator pada ekspresi konstan menghasilkan ekspresi konstan, dan kompilator melakukan semua perhitungan; itu tidak mempengaruhi kinerja run-time.

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.