Angular-styleguide: konvensi di sekitar anggota publik / swasta

Dibuat pada 28 Mar 2016  ·  13Komentar  ·  Sumber: johnpapa/angular-styleguide

Jadi kita harus membuat konvensi kapan harus menggunakan public dan private dan bahkan mempertimbangkan kapan harus menggunakan garis bawah untuk mengawali metode/atribut.

class Foo {
  public foo: string;
  private bar: number;
  private _fn() { ... }

Secara pribadi saya memilih untuk menggunakan garis bawah pada metode/atribut pribadi serta kata kunci private dan membiarkan public tidak digunakan.

Angular 2 enhancement

Komentar yang paling membantu

TypeScript/JavaScript tidak memiliki variabel pribadi yang sebenarnya dan penggunaan kelas berarti bahwa kami memiliki lebih sedikit kemampuan untuk menyembunyikan variabel daripada di JavaScript pra-kelas. Kami hanya memiliki konvensi '_' untuk menyelamatkan kami.

Nilai utama dari konvensi '_' adalah ia berteriak " Jangan sentuh! ". Saat men-debug JavaScript, itu saja yang harus kita lakukan.

Ketika orang melihat something.foo di debugger, mereka tidak dapat mengetahui dengan pasti apakah foo itu (a) publik dan tidak berdokumen atau (b) pribadi. Tanpa pemberitahuan yang memadai, mereka merasa bebas untuk merujuknya ke dalam kode mereka sendiri. Pada saat itu, pengembang dikenai kewajiban dukungan.

Ketika pembaca melihat _foo , mereka harus tahu itu terlarang . Jika mereka mereferensikan _foo mereka melakukannya _dengan risiko mereka sendiri_. Tidak boleh ada air mata ketika pengembang menghapusnya atau mengubah perilakunya.

Dalam dokumen dan sampel kami, anggota pribadi harus dimulai dengan '_'. Di mana kami telah mengabaikan awalan pribadi dengan '_', kami memperbaikinya dengan cepat.

Semua 13 komentar

Saya sangat setuju dengan itu. Maaf, melewatkan bagian itu.

Dingin.

Dan saya pikir masalah Anda memiliki beberapa perspektif yang penting untuk ditambahkan ke panduan ini, jadi saya akan membukanya kembali. :)

Saya ingin menambahkan bagian tentang penamaan ini ke panduan. Jika Anda bertanya, maka orang lain juga akan bertanya.

Apa gunanya menggunakan garis bawah dalam nama fungsi pribadi dan bukan anggota juga? Bukankah itu juga pribadi? Atau, apakah garis bawah memberikan arti yang berbeda pada fungsi itu sendiri?

Sekarang setelah Anda menyebutkannya, ya, saya lebih suka menggarisbawahi untuk atribut juga. Anda dapat memiliki sesuatu seperti:

private _foo: string;

@Input()
set foo(value) { this._foo = value; }

get foo() { return this._foo; }

Dengan setter dan getter yang lebih kompleks tentunya.

ya, salah ketik

Saya tidak suka menggarisbawahi secara pribadi ... tetapi karena tidak ada pribadi atau publik yang nyata dalam javascript, sangat membantu untuk memiliki cara untuk membedakannya. Jadi saya menggunakannya

UPDATE: saya mengacu pada ES5 ... dengan TypeScript saya tidak menggunakan garis bawah

Apakah menurut Anda akan terjadi kebingungan jika garis bawah dihilangkan?

TypeScript/JavaScript tidak memiliki variabel pribadi yang sebenarnya dan penggunaan kelas berarti bahwa kami memiliki lebih sedikit kemampuan untuk menyembunyikan variabel daripada di JavaScript pra-kelas. Kami hanya memiliki konvensi '_' untuk menyelamatkan kami.

Nilai utama dari konvensi '_' adalah ia berteriak " Jangan sentuh! ". Saat men-debug JavaScript, itu saja yang harus kita lakukan.

Ketika orang melihat something.foo di debugger, mereka tidak dapat mengetahui dengan pasti apakah foo itu (a) publik dan tidak berdokumen atau (b) pribadi. Tanpa pemberitahuan yang memadai, mereka merasa bebas untuk merujuknya ke dalam kode mereka sendiri. Pada saat itu, pengembang dikenai kewajiban dukungan.

Ketika pembaca melihat _foo , mereka harus tahu itu terlarang . Jika mereka mereferensikan _foo mereka melakukannya _dengan risiko mereka sendiri_. Tidak boleh ada air mata ketika pengembang menghapusnya atau mengubah perilakunya.

Dalam dokumen dan sampel kami, anggota pribadi harus dimulai dengan '_'. Di mana kami telah mengabaikan awalan pribadi dengan '_', kami memperbaikinya dengan cepat.

Asumsi Ward adalah bahwa kita akan men-debug javascript .... untuk beberapa yang mungkin tampak aneh, tapi saya melihatnya sebagai rencana cadangan yang bagus jika sourcemaps tidak bekerja begitu panas atau jika kita hanya ingin pemahaman yang lebih jelas tentang apa yang terjadi.

Ini juga merupakan indikator visual yang bagus tentang cara menggunakannya.

Semua yang dikatakan Ward.

Juga dengan ng2 kita dapat memiliki referensi seperti:

<my-dir #myDir>

dan mengakses atribut di dalamnya. Jika salah satunya memiliki garis bawah, itu adalah sinyal "ini bisa rusak besok, jangan lakukan"

Setuju, tidak ada cara yang lebih baik untuk membedakannya. Ini adalah sekolah lama untuk pengembang. Tidak ada salahnya kecuali kenyamanan.

Masalah sudut 2 sekarang akan masuk ke panduan gaya A2 di repo angular.io

Harap perhatikan bahwa Angular codeStyle (aturan 03-04) saat ini telah diubah dibandingkan dengan saran @johnpapa di sini dan sekarang menyarankan untuk TIDAK menggunakan garis bawah untuk variabel pribadi:

Avoid prefixing private properties and methods with an underscore.
- Why? Follows conventional thinking for properties and methods.
- Why? JavaScript lacks a true private property or method.
- Why? TypeScript tooling makes it easy to identify private vs. public properties and methods.

Jadi ini adalah kebalikan dari apa yang disarankan dalam masalah ini.

Ketika saya pertama kali membaca masalah ini, saya pikir saya telah menemukan perbedaan, tetapi aturan yang diperbarui/dibalik sejalan dengan pedoman pengkodean TypeScript (aturan nr 6 untuk nama).

Saya pikir argumen TypeScript tooling mungkin telah mempengaruhi John. Melihat dia sangat fasih dalam bahasa Gulp, dia mungkin telah memutuskan bahwa tidak memiliki file .map yang berfungsi untuk debugging hanyalah situasi yang tidak dapat dijalankan, yang harus diperbaiki secara langsung, alih-alih memperbaikinya dalam kode Anda dengan mengotorinya dengan garis bawah :P.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat