20_20 est l'année où le trait de soulignement dans les littéraux numériques a gagné

Soudain, vous ne saviez pas, mais dans la langue dans laquelle vous Ă©crivez, vous pouvez utiliser les _chiffres. Par exemple, le code PHP suivant:



<?php

print(1_00);
print(100);


Sortira 100100( vérifier en ligne ). Ce sucre syntaxique est apparu à Ada en 1980 et a connu un succès mitigé au cours des 40 dernières années. Mais au cours de la dernière année, il a été ajouté à javascript, PHP, Go, Scala et même Erlang conservateur. Je ne peux pas expliquer ce qui a causé la montée en flèche de la popularité, donc dans cet article, je vais simplement décrire l'histoire des séparateurs en chiffres.



19 68 Algol



A l'aube de la programmation, nous ne nous préoccupions pas vraiment des espaces, et donc dans Algol il était possible d'insérer un espace dans les noms et les nombres de variables. Par exemple, a 1 st varest un nom de variable valide et un synonyme a1stvar. Le code:



BEGIN
    INT  a 1 st var = 1 234 567;
    REAL a 2 nd var  = 3      .    1 4159 26 5 359;
    print((a1stvar, newline, a2ndvar))
END


Sortira ( vérifier ):



   +1234567
+3.14159265359000e  +0


, , Algol. , , FORTRAN 77 .



UPD: ( fixed-form source files). fixed-form source files 2018 .



19_80 Ada



, 1980 Ada. , Ada 2 16. 11 (6 ) 5#11#. , , I: Float := 3#0.1# — 1/3 ( ):



with Ada.Float_Text_IO; use Ada.Float_Text_IO;
procedure hello is
    I: Float := 3#0.1#;
    J: Float := 1_00.0;
begin
    Put(I);
    Put(J);
end hello;


3.33333E-01 1.00000E+02 ().



19_85 Caml



19_87 Perl



, , Caml Perl. Perl , ( ) :



$x = 1_0_0;
$y = 2__5________0;
$z = $x+$y;

print "Sum of $x + $y = $z";


Sum of 100 + 250 = 350 ().



19_93 Ruby



19_96 OCaml



, , . OCaml () Caml, Ruby Perl, (, ).



20_03 D (v0.69)



D , , ( ).



20_10 Rust



20_11 Java (SE 7)



20_12 Julia



Rust OCaml, Julia Ruby. Java Perl .



20_14 Swift



Rust.



20'14 C++ (v14)



. , C++ . , _1 . :



#include <iostream>

int main()
{
  for (int _1 = 0; _1 < 5; ++_1) {
    std::cout << _1 << " ";
  }
}


0 1 2 3 4 (). C++ 1'00.



UPD: , (User-defined literals). 1:



#include <iostream>

constexpr unsigned long long operator"" _0(unsigned long long i)
{
    return 1;
}

int main()
{
    int x = 0_0;
    std::cout << x;

    return 0;
}


20_16 Python (3.6)



20_17 C# (7.0), Kotlin (v1.1)



20_18 Haskell (GHC 8.6.1)



20_19 JS (V8 v7.5, Chrome 75), PHP (v7.4), Go (v1.13), Scala (v2.13)



- , . , , . , PHP :



// PHP 7.3
decimal : [1–9][0–9]* | 0
hexadecimal : 0[xX][0–9a–fA–F]+
octal : 0[0–7]+
binary : 0[bB][01]+

// PHP 7.4
decimal : [1–9][0–9]*(_[0–9]+)* | 0
hexadecimal : 0[xX][0–9a–fA–F]+(_[0–9a–fA–F]+)*
octal : 0[0–7]+(_[0–7]+)*
binary : 0[bB][01]+(_[01]+)*


, PHP :





20_20 Erlang (v23)



Erlang. , , Erlang , Ada ( ), ( 36). , () 3z 36 (=143).



-module(main).
-export([start/0]).

start() ->
  io:fwrite("~w", [36#3z]).


33 .




All Articles