Apa yang sebenarnya melarikan diri karakter backslash "\"?

13

Apa sebenarnya garis miring terbalik?

Ini digunakan sebagai karakter yang melarikan diri. Tapi saya selalu bertanya-tanya apa yang melarikan diri, atau apa yang melarikan diri.

Saya tahu "\ n" menunjuk baris baru. Tapi di mana datangnya pelarian itu? Mengapa disebut demikian?

Tuan Coder
sumber
15
Itu lolos dari amarahku saat mengacaukan dawanku.
Joel Etherton

Jawaban:

37

Backslash digunakan sebagai karakter marker untuk memberi tahu kompiler / juru bahasa bahwa karakter berikutnya memiliki beberapa makna khusus. Apa artinya karakter berikutnya terserah implementasi. Misalnya bahasa gaya-C gunakan \ n untuk berarti baris baru dan \ t untuk tab artinya.

Penggunaan kata "escape" benar-benar berarti untuk sementara keluar dari parsing teks dan ke mode lain di mana karakter selanjutnya diperlakukan secara berbeda.

Sean
sumber
8
Bergantung pada karakternya, garis miring terbalik mungkin memberi tahu kompiler / juru bahasa bahwa karakter berikut tidak memiliki arti khusus. Misalnya, ketika keluar dari tanda kutip.
Ryan Kinal
12
Atau melarikan diri.
Malfist
12

:))

Ini adalah istilah yang terkait dengan urutan pelarian dan kunci Esc (pelarian).

Karakter itu sendiri tidak "melarikan diri" dari karakter lain mana pun. Orang mungkin mengatakan karakter mengikuti karakter pelarian (katakanlah, \ n dari contoh Anda) lolos dari nasib yang digunakan sebagai n biasa dalam beberapa aplikasi, dan malah digunakan sebagai baris baru.

Benteng
sumber
3

Escape sequence memiliki banyak kesamaan dengan konsep komunikasi out-of-band :

Kadang-kadang juga digunakan untuk menggambarkan apa yang orang-orang sebut komunikasi karakter shift, seperti ESC yang memimpin urutan kontrol untuk banyak terminal, atau indikator level shift dalam kode Baudot 5-bit lama.

Katakanlah Anda sedang melakukan transfer file melalui port serial dan Anda bernegosiasi dengan komputer di ujung lainnya: "Oke, ini dia file". Karena dalam kasus umum semua karakter mungkin karakter file yang valid (jika ini adalah file ASCII) Anda memiliki beberapa masalah:

  • Bagaimana Anda tahu di mana ujung sungai itu?
  • Beberapa skema menggunakan ASCII NUL (nol) untuk mengakhiri, seperti string dalam beberapa bahasa, tetapi kemudian Anda tidak dapat memiliki karakter itu di file. Itu tidak diizinkan dalam beberapa pengaturan, seperti transfer file. Nol bisa menjadi karakter yang valid.
  • Anda dapat mengirim panjang file yang diharapkan terlebih dahulu, tetapi bagaimana jika Anda perlu membatalkan?

Berbagai orang sepanjang sejarah komputasi telah menerapkan banyak metode berbeda untuk mengatasi masalah ini.

Dalam kasus string literal dalam bahasa pemrograman, itu masalah yang sama. Kutipan pertama mengatakan "ini dia string - mulailah membaca sampai Anda mendapatkan penawaran lain". Tentu saja, maka Anda memiliki masalah dalam mengirim karakter kutipan, sehingga mereka menemukan urutan slash escape. Jika Anda melihat garis miring dan kutipan, maka itu kutipan literal, bukan akhir dari string. Sayangnya Anda baru saja menelan laba-laba untuk memakan lalat, karena sekarang Anda tidak dapat mengirim kombinasi kutipan garis miring. Jadi, Anda bisa lolos dari tebasan dengan tebasan lain. Jadi slash-slash berarti slash, slash-quote berarti kutipan. Itu memungkinkan mereka menggunakan garis miring untuk karakter yang tidak dapat dicetak atau sulit dicetak lainnya seperti carriage return, line feed, tab, dll.

Scott Whitlock
sumber
3

Ini adalah pelarian dari konteks parsing , yang menuntut (apa yang penjahat) nditafsirkan sebagai nbukan sebagai newline.

Perbedaan yang paling menarik tentang hal itu adalah bahwa pelarian tidak mengubah konteks parsing seperti yang dilakukan oleh karakter kutipan "(atau banyak simbol lainnya), membutuhkan simbol lain "(atau simbol lain) untuk kembali ke konteks sebelumnya. Mereka hanya mengambil sedikit pengalihan tetapi kembali di jalan ASAP.

Namun tidak ada yang berbicara lagi tentang konteks parsing , sebanyak tidak ada yang tampaknya menulis parser lagi, sejak munculnya xml dan json. Beberapa masalah berhenti menjadi arus utama, masuk ke ceruk dan konsep ceruk aneh seperti itu tetap ada.

ZJR
sumber