Porównanie języków programowania (stringi)

To porównanie języków programowania (łańcuchów) porównuje cechy struktur danych ciągów lub przetwarzania ciągów tekstowych dla ponad 52 różnych języków programowania komputerowego .

Powiązanie

Różne języki używają różnych symboli dla operatora konkatenacji. Wiele języków używa symbolu „+”, chociaż kilka od niego odbiega.

Typowe warianty

Operator Języki
+ ALGOL 68 , BASIC , C++ , C# , Cobra , Dart , Eiffel , F# , Go , Java , JavaScript , Object Pascal , Objective-C , Pascal , Python , Ruby , Rust , Scala , Swift , Turing , Windows PowerShell , Ya
++ Erlang , Haskell
$+ Język skryptowy mIRC
& Ada , AppleScript , COBOL (tylko dla literałów), Curl , FreeBASIC , Excel , Nim , Seed7 , VHDL , Visual Basic , Visual Basic .NET
nconc pospolity LISP
. Autohotkey, Maple (do wersji 5), Perl , PHP
~ D , Raku
|| Icon , Maple (od wersji 6), PL/I , Rexx , Standard SQL
<> Matematyka , język Wolframa
.. Lua
: Wybierz podstawowe
, APL , język programowania J , Smalltalk
^ F# , OCaml , rc , standardowa ML
// Fortran
* Julia

Unikalne warianty

  • Awk używa pustego łańcucha: dwa sąsiadujące ze sobą wyrażenia są łączone. Nazywa się to zestawieniem . Powłoki systemu Unix mają podobną składnię. Rexx używa tej składni do konkatenacji, w tym spacji pośredniej.
  • C (wraz z Pythonem) umożliwia zestawienie literałów łańcuchowych, jednak w przypadku łańcuchów przechowywanych jako tablice znaków należy użyć funkcji strcat .
  • COBOL używa instrukcji STRING do łączenia zmiennych łańcuchowych.
  • MATLAB i Octave używają składni „ [xy] ” do łączenia x i y.
  • Visual Basic i Visual Basic .NET mogą również używać znaku „ + ”, ale istnieje ryzyko niejednoznaczności, jeśli ciąg reprezentujący liczbę i liczbę są razem.
  • Microsoft Excel dopuszcza zarówno „ & ”, jak i funkcję „ =CONCATENATE(X,Y) ”.
  • Rust ma konkat! makro i format! makro, z których to drugie jest najbardziej rozpowszechnione w całej dokumentacji i przykładach.

Literały łańcuchowe

W tej sekcji porównano style deklarowania literału łańcuchowego .

Cytowane interpolowane

Wyrażenie jest „interpolowane” do łańcucha, gdy kompilator/interpreter ocenia je i wstawia wynik w jego miejsce.

Składnia Języki)
$"cześć, {imię}" C#, Visual Basic .NET
"Witaj, $imię!" Bourne Shell , Dart, Perl, PHP, Windows PowerShell
qq(Witaj, $imię!) Perl (alternatywny)
"Cześć, {$imię}!" PHP (alternatywa)
"Cześć, #{imię}!" CoffeeScript, Ruby
%Q(Witaj, #{imię}!) Rubin (alternatywny)
(format t „Cześć, ~A”) pospolity LISP
`Cześć, ${imię}!` JavaScript (ECMAScript 6)
"Witaj, \(imię)!" Szybki
f'Cześć, {imię}!' Pyton

Uciekły cytaty

Cudzysłowy „Escaped” oznaczają, że symbol „flagi” jest używany do ostrzeżenia, że ​​znak po fladze jest używany w łańcuchu, a nie na końcu łańcucha.

Składnia Języki)
"Powiedziałem \"Witaj, świecie!\"" C, C++, C#, D, Dart, F#, Java, JavaScript, Mathematica, Ocaml, Perl, PHP, Python, Rust, Swift, Wolfram Language, Ya
'Powiedziałem \'Witaj, świecie!\'' CoffeeScript, Dart (alternatywnie), JavaScript (alternatywnie), Python (alternatywnie)
„Powiedziałem: „Witaj, świecie!”” Windows Powershell
"Powiedziałem ^"Witaj, świecie!^"" REBOL
{Powiedziałem "Witaj, świecie!"} REBOL (alternatywa)
„Powiedziałem: %„Witaj, świecie!%”” Eiffla
!"Powiedziałem \"Witaj, świecie!\"" FreeBASIC
r#"Powiedziałem "Witaj, świecie!""# Rdza (alternatywna)

Podwójne cytowanie

„Podwójny cudzysłów” oznacza, że ​​ilekroć w łańcuchu używany jest cudzysłów, jest on używany dwukrotnie, a jeden z nich jest odrzucany, a następnie pojedynczy cudzysłów jest używany w ciągu.

Składnia Języki)
„Powiedziałem: „Witaj, świecie!”” Ada, ALGOL 68, COBOL, Excel, Fortran, FreeBASIC, Visual Basic (.NET)
'Powiedziałem ''Witaj, świecie!''' APL, COBOL, Fortran, Object Pascal, Pascal, rc, Smalltalk, SQL

Cytowane na surowo

„Surowy” oznacza, że ​​kompilator traktuje każdy znak w obrębie literału dokładnie tak, jak został napisany, bez przetwarzania jakichkolwiek znaków ucieczki lub interpolacji.

Składnia Języki)
'Witaj świecie!' APL, Bourne Shell, Fortran, Object Pascal, Pascal, Perl, PHP, Pick Basic, Ruby, Smalltalk, Windows PowerShell
q(Witaj, świecie!) Perl (alternatywny)
%q(Witaj, świecie!) Rubin (alternatywny)
R „(Witaj, świecie!)” C++11
@"Witaj świecie!" C#, F#
r „Witaj, świecie!” Cobra, D, Dart, Python, Rust
r'Witaj, świecie!' Strzałka (alternatywna)
"Witaj świecie!" Cobol, FreeBASIC, Pick Basic
`Witaj, świecie!` D. Idź
raw „Witaj, świecie!” Scala
String.raw`Witaj, świecie!` JavaScript (ECMAScript 6)

Ciąg wielowierszowy

Wiele języków ma składnię przeznaczoną specjalnie dla ciągów z wieloma wierszami. W niektórych z tych języków ta składnia to dokument tutaj lub „heredoc”: Token reprezentujący ciąg jest umieszczany w środku wiersza kodu, ale kod jest kontynuowany po początkowym tokenie, a treść ciągu nie pojawia się, dopóki następna linia. W innych językach treść ciągu rozpoczyna się natychmiast po tokenie początkowym, a kod jest kontynuowany po terminatorze literału łańcuchowego.

Składnia Tutaj dokument Języki)
<
Tak Bourne Shell, Perl, PHP, Ruby
<<
Tak PHP
@" Mam wiele rzeczy do powiedzenia, a tak mało czasu, aby je powiedzieć "@
NIE Windows Powershell
„[Mam wiele rzeczy do powiedzenia, a tak mało czasu, aby je powiedzieć]”
NIE Eiffla
""" Mam wiele rzeczy do powiedzenia, a tak mało czasu, aby je powiedzieć """
NIE CoffeeScript, Dart, Groovy, Kotlin, Python, Swift
„Mam wiele rzeczy do powiedzenia, a tak mało czasu, aby je powiedzieć”
NIE Rust (wszystkie ciągi są wielowierszowe), Visual Basic .NET (wszystkie ciągi są wielowierszowe)
r„Mam wiele rzeczy do powiedzenia, a tak mało czasu, aby je powiedzieć”
NIE Rdza
[[ Mam wiele rzeczy do powiedzenia, a tak mało czasu, aby je powiedzieć ]]
NIE Lua
` Mam wiele rzeczy do powiedzenia, a tak mało czasu, aby je powiedzieć `
NIE JavaScript (ECMAScript 6)

Unikalne warianty cytowania

Składnia Nazwa wariantu Języki)
13HWitaj, świecie! Notacja Holleritha Fortran 66
(wcięcie z białymi znakami) Wcięty spacjami i znakami nowej linii YAML

Notatki

1. ^ String.raw`` nadal przetwarza interpolację łańcuchów.
1. ^ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw