Literale cu șiruri

Obiectele șiruri conțin secvențe ordonate de octeți, de obicei caractere, de obicei pentru a forma bucăți de text care poate fi citit de om. Acestea sunt un tip de obiect foarte comun în toate limbajele de programare, iar Ruby are o serie de moduri la nivel înalt și câteva moduri de nivel scăzut de a crea, accesa și manipula obiecte String.

Șirurile sunt de cele mai multe ori create cu un String literal. Un literal este o sintaxă specială în limbajul Ruby care creează un obiect de un anumit tip. De exemplu, 23 este un literal care creează o Fixnum obiect. În ceea ce privește literele cu șiruri, există mai multe forme.

Șiruri de cotați și citate duble

Majoritatea limbilor au un String literal similar cu acesta, deci acest lucru poate fi familiar. Tipurile de citate, '(citat unic, apostrof sau citat greu) și „(citat dublu sau citat moale) sunt utilizate pentru a încărca literalele cu șiruri, orice dintre ele va fi transformat în obiecte String. Următorul exemplu demonstrează acest lucru.

Există însă unele diferențe între ghilimele simple și duble. Citate duble sau citate moi permiteți ceva magie să se întâmple în culise. Cel mai util este interpolarea în interiorul șirurilor, utilă pentru inserarea valorii unei variabile în mijlocul unei șiruri. Acest lucru se realizează prin utilizarea # ... secvenţă. Următorul exemplu vă va solicita numele și vă va saluta, folosind interpolarea pentru a introduce numele dvs. în șirul literal care este tipărit.

Rețineți că orice cod poate intra în bretele, nu doar nume variabile. Ruby va evalua codul și orice va fi returnat va încerca să-l insereze în șir. Deci, puteți spune la fel de ușor "Bună ziua, # gets.chomp" și uitați de Nume variabil. Cu toate acestea, este o practică bună să nu introduceți expresii lungi în interiorul bretelelor.

Citate unice, apostrofe sau citate grele sunt mult mai restrictive. În interiorul ghilimelelor unice, Ruby nu va efectua secvențe de interpolare sau de scăpare, în afară de scăparea personajului unic de cotație și de retragere în sine (\“ și \\ respectiv). Dacă nu intenționați să folosiți interpolarea, este recomandat să utilizați ghilimele mai des decât nu.

Următorul exemplu va încerca să interpoleze o variabilă în interiorul ghilimelelor unice.

Dacă executați acest lucru, nu veți primi nicio eroare, dar ce va fi tipărit?

Secvența de interpolare a fost transmisă prin neinterpretat.

Când ar trebui să folosesc ghilimele simple și duble

Aceasta este o chestiune de stil. Unii preferă să folosească tot timpul citate duble, cu excepția cazului în care devin incomode. Alții ar prefera să folosească ghilimele unice, cu excepția cazului în care este prevăzut comportamentul de interpolare. Nu există nimic inerent periculos despre utilizarea citatelor duble tot timpul, dar face ușor de citit un cod. Nu trebuie să citiți un șir atunci când citiți codul, dacă știți că nu există interpolări în el, deoarece știți că șirul în sine nu va avea efecte secundare. Deci, forma literală de șir pe care o utilizați depinde de dvs., nu există niciun fel de mod corect și greșit aici.

Secvențe de evadare

Ce se întâmplă dacă, într-un literal de șir, doriți să includeți un caracter de citat? De exemplu, șirul "Steve a spus" Moo! " nu va funcționa. Și nici nu va "Nu pot atinge asta!". Ambele din aceste șiruri includ caracterul citat din interiorul șirului, care încheie în mod efectiv literalul șirului și provoacă o eroare de sintaxă. Puteți schimba caracterele de ofertă, de exemplu 'Steve a spus "Moo!", dar asta nu rezolvă cu adevărat problema. În schimb, puteți scăpa de orice caracter de citat din șir, și își va pierde sensul special (în acest caz, sensul special este să închideți șirul).

Pentru a scăpa de un personaj, pregătiți-l cu caracterul invers. Personajul inapoi îi spune lui Ruby să ignore orice sens special pe care îl poate avea următorul personaj. Dacă este un caracter de cota potrivită, nu încheiați șirul. Dacă este un semn de hash, nu începeți un bloc de interpolare. Următorul exemplu demonstrează această utilizare a retragerii pentru a scăpa de caractere speciale.

Caracterul backslash poate fi utilizat pentru a elimina orice semnificație specială din următorul caracter, dar, confuz, poate fi folosit și pentru a denota un comportament special în șiruri cu citate dublă. Majoritatea acestor comportamente speciale au legătură cu inserarea caracterelor și secvențelor de byte care nu pot fi tastate sau reprezentate vizual. Nu toate șirurile sunt șiruri de caractere sau pot conține secvențe de control destinate terminalului și nu utilizatorul. Ruby vă oferă posibilitatea de a insera aceste tipuri de șiruri folosind caracterul de scăpare din spate.

  • \ n - Un caracter newline. puts metoda face acest lucru automat, dar dacă doriți să introduceți una în mijlocul unei șiruri, sau șirul este destinat pentru altceva decât puts metodă, puteți utiliza aceasta pentru a insera o linie nouă într-un șir.
  • \ t - Un caracter tab. Caracterul de tab mută cursorul peste (pe majoritatea terminalelor) pe un multiplu de 8, deci acest lucru este foarte util pentru afișarea datelor tabulare. Cu toate acestea, există modalități mai bune de a face acest lucru, iar utilizarea caracterului de tab este considerată un pic arhaică sau haiduce.
  • \ nnn - O reversare urmată de 3 numere va indica un caracter ASCII reprezentat de 3 cifre octale. De ce octal? Mai ales din motive istorice.
  • \ xnn - o retragere, o cifră x și 2 cifre hexagonale. La fel ca versiunea octal, numai cu cifre hexagonale.

Probabil nu veți folosi niciodată majoritatea acestora, dar știți că există. Și, de asemenea, amintiți-vă că funcționează doar în șiruri cu cotație dublă.