Apakah spasi dan komentar dalam kode VBA memengaruhi kinerja?


3

Saya baru mengenal pemrograman VBA. Saya pikir saya telah melihatnya di suatu tempat tetapi saya benar-benar lupa di mana saya melihatnya. Mungkin saya mendengarnya dari seseorang.

Pertanyaan saya: apakah jumlah komentar dan spasi putih di VBA memengaruhi kinerja kode?

Saya kira itu harus sama di Excel dan Access tetapi saya tidak ingin berasumsi jadi saya akan menentukan saya menggunakan Access 2003.


Apakah Anda mengalami masalah khusus yang Anda curigai sebagai penyebabnya?
CharlieRB

Tidak benar-benar tetapi saya jatuh pada beberapa artikel yang menyatakan komentar dan ruang antara kode di vba memperlambat proses. yang saya tidak sepenuhnya yakin dengan.
Penggemar Coding

Jawaban:


0

Karakter dan komentar spasi putih biasanya diabaikan oleh kompiler dan juru bahasa. Saya tidak dapat menemukan pernyataan resmi untuk efek ini untuk VBA secara khusus (mirip dengan ini untuk kode C di Visual Studio), tetapi dari pengujian eksperimental VBA tampaknya berperilaku dengan cara yang sama.

Mengenai jumlah kode dalam VBA yang mempengaruhi kinerja prosedur, jelas semakin banyak kode, semakin lama prosedur akan menyelesaikan eksekusi.


Beberapa penerjemah, mis. Yang menerjemahkan pada waktu berjalan, harus berurusan dengan spasi putih pada waktu berjalan. Meskipun ini adalah jumlah waktu yang dihabiskan untuk melewati ruang putih, sebagian besar tidak signifikan. Compiler melakukan seperti yang Anda katakan.
Tampilan elips

0

Dari MSDN MS-VBAL Aturan Leksikal

Juga ingat nama variabel dan konstan tidak ada dalam program yang dikompilasi.

3.2.1 Tata Bahasa Garis Fisik

module-body-physical-structure = *source-line [non-terminated-line]
source-line = *non-line-termination-character line-terminator
non-terminated-line = *non-line-termination-character
line-terminator = (%x000D %x000A) / %x000D / %x000A / %x2028 / %x2029
non-line-termination-character = <any character other than %x000D / %x000A / %x2028 / %x2029>

Implementasi DAPAT membatasi jumlah karakter yang diizinkan dalam garis fisik. Arti dari modul yang berisi garis fisik apa pun yang melebihi batas implementasi tidak ditentukan oleh spesifikasi ini. Jika <module-body-phisical-structure> diakhiri dengan <non-terminated-line> maka implementasi MUNGKIN memperlakukan modul seolah-olah <non-terminated-line> segera diikuti oleh <line-terminator>.

Untuk keperluan interpretasi sebagai teks program VBA, badan modul (bagian 4.2) dipandang sebagai satu set garis logis yang masing-masingnya mungkin berhubungan dengan beberapa garis fisik. Struktur ini dijelaskan oleh Tata Bahasa Jalur Logika. Simbol terminal tata bahasa ini adalah codepoint karakter Unicode.

3.2.2 Tata Bahasa Baris Logis

module-body-logical-structure = *extended-line
extended-line = *(line-continuation / non-line-termination-character) line-terminator
line-continuation = *WSC underscore *WSC line-terminator
WSC = (tab-character / eom-character /space-character / DBCS-whitespace / most-Unicode-class-Zs)
tab-character = %x0009
eom-character = %x0019
space-character = %x0020
underscore = %x005F
DBCS-whitespace = %x3000
most-Unicode-class-Zs = <all members of Unicode class Zs which are not CP2-characters>

Implementasi DAPAT membatasi jumlah karakter dalam <extended-line>. Untuk kemudahan spesifikasi, lebih mudah untuk dapat secara eksplisit merujuk ke titik yang segera mendahului awal garis logis dan titik segera sebelum terminator-akhir garis garis logis. Ini dicapai dengan menggunakan <LINE-START> dan <LINE-END> sebagai simbol terminal dari tata bahasa VBA. <LINE-START> didefinisikan untuk segera mendahului setiap baris logis dan <LINE-END> didefinisikan sebagai mengganti <line-terminator> di akhir setiap baris logis:

module-body-lines = *logical-line
logical-line = LINE-START *extended-line LINE-END

Ketika digunakan dalam definisi aturan ABNF, <LINE-START> dan <LINE-END> digunakan untuk mengindikasikan awal atau akhir yang diperlukan dari sebuah <logical-line>.

3.3 Token Leksikal

Sintaksis program-program VBA paling mudah dijelaskan dalam hal token leksikal daripada karakter Unicode individual. Secara khusus, terjadinya spasi putih atau garis-kelanjutan antara sebagian besar elemen sintaksis biasanya tidak relevan dengan tata bahasa sintaksis. Tata bahasa sintaksis secara signifikan disederhanakan jika tidak harus menggambarkan kemungkinan kejadian spasi putih. Ini dicapai dengan menggunakan token leksikal (juga disebut hanya sebagai token) yang mengaburkan spasi putih sebagai simbol terminal tata bahasa sintaksis. Tata bahasa leksikal mendefinisikan interpretasi dari <module-body-lines> sebagai satu set token leksikal tersebut.

Elemen terminal tata bahasa leksikal adalah karakter Unicode dan elemen <LINE-START> dan <LINE-END>. Umumnya setiap nama aturan tata bahasa leksikal yang ditulis dalam semua karakter huruf besar juga merupakan token leksikal dan elemen terminal dari tata bahasa sintaksis VBA. ABNF mengutip aturan teks literal juga dianggap sebagai token leksikal dari tata bahasa sintaksis. Token leksikal mencakup karakter spasi putih apa pun yang langsung mendahuluinya. Perhatikan bahwa ketika digunakan dalam tata bahasa leksikal, aturan teks literal yang dikutip tidak diperlakukan sebagai token dan karenanya karakter spasi putih sebelumnya adalah signifikan.

3.3.1 Pemisah dan Token Khusus

WS = 1*(WSC / line-continuation)
special-token = "," / "." / "!" / "#" / "&" / "(" / ")" / "*" / "+" / "-" / "/" / ":" / ";" / "<" / "=" / ">" / "?" / "\" / "^"
NO-WS = <no whitespace characters allowed here>
NO-LINE-CONTINUATION = <a line-continuation is not allowed here>
EOL = [WS] LINE-END / single-quote comment-body
EOS = *(EOL / ":") ;End Of Statement
single-quote = %x0027 ; '
comment-body = *(line-continuation / non-line-termination-character) LINE-END

<special-token> digunakan untuk mengidentifikasi karakter tunggal yang memiliki arti khusus dalam sintaksis program VBA. Karena mereka adalah leksikal token (bagian 3.3), karakter ini dapat didahului oleh karakter spasi putih yang diabaikan. Setiap kejadian salah satu elemen <special-token> yang dikutip sebagai elemen tata bahasa dalam tata bahasa sintaksis adalah referensi ke token yang sesuai (bagian 3.3).

<NO-WS> digunakan sebagai elemen terminal dari tata bahasa sintaksis untuk menunjukkan bahwa token yang segera mengikutinya tidak boleh didahului oleh karakter spasi putih apa pun. <NO-LINE-CONTINUATION> digunakan sebagai elemen terminal dari tata bahasa sintaksis untuk menunjukkan bahwa token yang segera mengikutinya tidak boleh didahului dengan spasi putih yang mencakup urutan <linecontinuation> apa pun.

<WS> digunakan sebagai elemen terminal dari tata bahasa sintaksis untuk menunjukkan bahwa token yang segera mengikutinya harus didahului oleh satu atau lebih karakter spasi putih.

<EOL> digunakan sebagai elemen tata bahasa sintaksis untuk memberi nama token yang bertindak sebagai penanda "akhir pernyataan" untuk pernyataan yang harus merupakan satu-satunya atau pernyataan terakhir pada baris logis.

<EOS> digunakan sebagai elemen terminal dari tata bahasa sintaksis untuk memberi nama token yang bertindak sebagai penanda "akhir pernyataan". Secara umum, akhir pernyataan ditandai oleh <LINE-END> atau karakter titik dua. Setiap karakter antara <single-quote> dan <LINE-END> adalah teks komentar yang diabaikan.


1
Tapi apa kesimpulannya, untuk kinerja?
Arjan

Pertanyaannya adalah VBA sehingga mencakup VB6 yang dikompilasi sebagai host VBA seperti kantor, jadi TIDAK ADA MASALAH KINERJA SEMUA. Dan perhatikan komentar saya tentang nama - mereka dikompilasi - mereka tidak ada dalam program yang dikompilasi. Juga tidak ada ruang.
memicu

0

Anda mungkin memperhatikan bahwa VBA diuraikan menjadi token yang dapat dieksekusi pada waktu edit, bukan pada waktu berjalan.

Beberapa ruang inline dikompilasi sebagai token n-spasi tunggal, sehingga dapat ditampilkan kembali untuk diedit, tetapi sebenarnya itu hanya token tunggal dalam kode yang dikompilasi. Jadi tidak masalah berapa banyak ruang yang Anda tempatkan di antara kata-kata. 100 sama dengan 1.

Jadi "Correct-by-construction" ini secara efektif menghilangkan ruang apa pun ketika Anda selesai mengedit (bukan ketika Anda menjalankannya).

Cobalah sendiri. Letakkan beberapa spasi tambahan di akhir baris, pindah ke baris berikutnya, lalu mundur dan spasi hilang. Juga perhatikan bahwa jika Anda mencoba memasukkan kode yang tidak valid, ia mengeluh sampai Anda memperbaikinya. Ini adalah tanda tangan dari parsing dan tokenization awal.

Jadi jawaban untuk pertanyaan Anda adalah bahwa tidak ada spasi tambahan ketika kode berjalan karena kode tersebut sudah dikompilasi sebelumnya, sehingga tidak dapat mempengaruhi kecepatan.

Saya pikir pembangunan yang benar adalah hal yang sangat keren. Ini adalah yang terbaik dari interpreter run time dan compiler cepat semua dalam satu!

Parser dalam bahasa komputer Forth melakukan sesuatu yang serupa, dalam cara kerjanya, tetapi tentu saja itu tidak benar oleh editor konstruksi. Saya selalu berharap untuk menambahkannya.


Ah, memang, sekarang aku ingat tingkah aneh editornya. Tetapi untuk "Saya pikir yang benar-oleh-konstruksi adalah hal yang sangat keren" : Saya hanya ingat betapa jengkelnya saya ketika Office akan memvalidasi / memperbaiki hal-hal dan melemparkan kesalahan kompilasi kepada saya ketika saya masih mengetik. :-)
Arjan

-1

Untuk sebagian besar situasi praktis, itu seharusnya tidak memiliki dampak apa pun.

Anda sebaiknya mempertimbangkan penggunaan spasi dan komentar bukan untuk kinerja tetapi untuk keterbacaan.


1
Jawaban ini tidak menambahkan informasi tambahan dan harus menjadi komentar.
Raystafarian

Apakah ada jawaban lain yang mengatakan sesuatu tentang keterbacaan?
user55570

-2

VBA adalah bahasa yang ditafsirkan, yang berarti bahwa penerjemah harus menguraikan semua kode yang dapat dibaca manusia Anda setiap kali dijalankan, berbeda dengan bahasa yang dikompilasi di mana kode yang dapat dibaca manusia dikompilasi satu kali ke dalam kode yang dapat dibaca mesin. Dalam kedua kasus tersebut, ruang putih & komentar dihapus sebelum eksekusi.

Secara teoritis, Anda dapat memberikan spasi ekstra putih dan / atau komentar ke dalam kode VBA Anda sehingga pada akhirnya Anda akan memperlambat penerjemah, tetapi Anda mungkin harus memiliki ribuan atau 10 ribu baris junk tambahan di sana untuk melihat perbedaan .

Itu akan membuat eksperimen yang menarik!


Pilih secara acak ... Peduli untuk menjelaskan mengapa?
FreeMan

Tampaknya setiap jawaban (bahkan yang dihapus) mendapat downvote.
Raystafarian

Ketika Anda menuju ke arah yang benar, apa yang Anda katakan tidak benar: "yang berarti bahwa penerjemah harus menguraikan semua kode yang dapat dibaca manusia setiap kali dijalankan"
Tampilan elips
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.