Magick de unitate alimentat de Babel

Introducere

Metrick este o biblioteca care va permite sa convertiti unitati si sa evitati utilizarea numerelor magice! In combinatie cu o extensie de sintaxa JavaScript inclusa in Babel, aceasta permite o sintaxa noua, curata si asemanatoare omului.

De exemplu;

importati {secunde, minute, milisecunde} din „metrick / duration”; // Sintaxa explicita setTimeout (() => console.log (‘1 minute a trecut!’), 1 :: minute.in (milisecunde)); // Sintaxa implicita setTimeout (() => console.log (’30 de secunde au trecut!’), 30 :: secunde);

Aici sunt prezentate doua sintaxe; explicit si implicit!

Sintaxa explicita

importati {gibibyte, megabytes} din „metrick / data”; importati {ani, zile} din „metrick / duration”; console.log (1 :: gibibyte.in (megaocteti)); // => 1073.741824 console.log (25 :: years.in (zile)); // => 9132,5

Sintaxa explicita foloseste o functie in pentru a converti unitatea originala intr-o alta unitate furnizata. Daca trimiti un obiect valid Unitate de acelasi tip catre, va rezulta rezultatul ca numar.

Sintaxa implicita

importati {megabiti} din „metrick / data”; importati {ore} din „metrick / duration”; console.log (50 :: megabiti); // => 50000000 console.log (24 :: ore); // => 86400000

Sintaxa implicita va converti numarul in unitatea implicita a tipului de unitate pe care o utilizati. De exemplu, unitatile de date se convertesc implicit in biti, iar unitatile de durata se convertesc implicit in milisecunde.

In general, unitatea implicita este unitatea de baza SI aplicabila, cu toate acestea, in cazul Duratei, unitatea implicita este de milisecunde, pentru compatibilitatea cu metodele standard JavaScript care se ocupa de timp.

Striga-i lui Glen Maddern pentru ideea din spatele sintaxei implicite

Utilizare

Nota : Aceasta presupune ca utilizati deja Babel pentru a transpile JavaScript-ul proiectului dvs. Daca nu, instructiunile sunt disponibile pe site-ul Babel

Configurati Babel pentru a transforma sintaxa legarii functiilor prin instalarea babel-plugin-transform-function-bind cu instrumentul dvs. preferat de gestionare a pachetelor Node si apoi adaugarea pluginului in .babelrc;

{“plugins”: [“transform-function-bind”]}

Tipuri de unitati personalizate

Exista un constructor de baza, pe care il puteti extinde pentru a va crea propriile clase de unitati.

yola berrocal follando your porn
sexogratis videos de zofilia gratis
videos incesto online trio bisex
penes negros porno español jovencitas
comiendo polla mi madre me folla
videos travestis en español descargar pelis pornos
jovencitasxxx matrimonios follando
pornotrans follando en español
descargar peliculas porno completas follada en la playa
colegialas anal porno online gratis
maduras sensuales gitanas follando
vecinasxxx videos xxx gratis español
videos chicas gratis porno estremo
porno gay chino video famosas desnudas
follándosela videos sexo español
porno hablado español videos pornos caseros reales
hermanos rusos follando sexo videos gratis
natalia sanchez desnuda follada a traicion
tetonas en la playa chantaje y lujuria
trio en la playa abuelas incestos

Tot ce trebuie sa faceti este sa il extindeti!

De exemplu, iata o implementare a unui tip de unitate de iluminare (o unitate putin probabil sa fie inclusa cu Metrick ????);

import Unit din „metrick / unit”; export clasa implicita Iluminare extinde Unitatea {// Nu sunt necesare suprascrieri; folosim clase pentru a verifica compatibilitatea conversiilor! } // unitate de baza SI, implicit export unitate implicita const lux = iluminare noua (); export implicit const footcandle = new Illuminance (10.763910417 :: lux); // pluralizeaza pentru o mai buna lizibilitate export implicit const footcandles = footcandle; export implicit const lumenPerSquareInch = new Illuminance (1550.0031 :: lux); export implicit const phot = iluminare noua (10000 :: lux);

Unitati personalizate

Fiecare tip de unitate expune un constructor pentru a crea un tip de unitate compatibil. Constructorii accepta doua forme de definire a relatiei dintre unitati;

  • Argumentul One Number, care indica multiplicatorul dintre unitate si unitate de baza
  • Doua functii, fiecare acceptand un argument numeric si se transforma la si de la unitatea de baza

De exemplu, iata o implementare a .beats ca unitate Duration, utilizand argumentul multiplicator;

import Durata, {zile, secunde, minute} din „metrick / duration”; // fiecare .beat este 1/1000 dintr-o zi, Duratele sunt masurate in secunde const dotBeat = Durata noua ((1/1000) :: days.in (secunde)); // pluralizeaza pentru o mai buna lizibilitate const dotBeats = dotBeat; console.log (1 :: dotBeat.in (minute)); // => 1.4400000000000002 console.log (12 :: dotBeats.in (minute)); // => 17.280000000000005

Ca exemplu de furnizare a functiilor, iata o implementare a unei conversii de temperatura a marcajului de gaz;

import Temperatura, {celsius} din „metrick / temperature”; const gasMark = new Temperatura ((temperature) => (temperature * 14 + 394,15), (temperature) => ((temperature – 394,15) / 14)); console.log (1 :: gasMark.in (celsius)); // => 135 console.log (5 :: gasMark.in (celsius)); // => 191

Unitati incluse

In prezent, Metrick include unitati pentru date si durata.

Nota : Toate unitatile incorporate sunt exportate cu numele lor la singular si plural – aici listam doar pluralul pentru scurta durata.

Date

  • biti (unitate de baza SI, unitate implicita)
  • octeti
  • exabits
  • exabytes
  • exbibits
  • exbibyte
  • gibibits
  • gibibite
  • gigabiti
  • gigabytes
  • kibibits
  • kibibytes
  • kilobiti
  • kilobytes
  • mebibits
  • mebibytes
  • megabiti
  • megaocteti
  • rontaie
  • pebibits
  • pebibytes
  • petabits
  • petabytes
  • tebibits
  • tebibyte
  • terabiti
  • terabytes

Durata

  • zile
  • ore
  • milisecunde (unitate implicita)
  • minute
  • luni
  • secunde (unitate de baza SI)
  • saptamani
  • ani

Lungime

Metric
  • centimetri
  • kilometri
  • metri (unitate de baza SI, unitate implicita)
  • milimetri
Imperial
  • lanturi
  • picioare (singular este picior)
  • inch (singularul este inch)
  • mile
  • pasi
  • curti
Ciudat
  • jambiere
  • twips
  • Unitati astronomice

Temperatura

Nota : unitatile de temperatura incorporate sunt exportate atat cu cat si fara prefix de grade – aici listam doar fara concizie.

  • celsius
  • fahrenheit
  • kelvin (unitate de baza SI, unitate implicita)

Export complet de biblioteca

Biblioteca include, de asemenea, un punct de intrare principal la index.js, care expune toate partile disponibile ale bibliotecii. Acest lucru nu este recomandat ca si cum, de exemplu, Webpack intreaga biblioteca, veti include conversii pe care este posibil sa nu le utilizati!

importati {Duration as DurationConstructor, duration} din „metrick”; import Duration, {minute} din „metrick / duration”; console.log (DurationConstructor === Duration) // => true console.log (duration.minute === minute); // => adevarat

Asteapta, cum functioneaza asta?

Aceasta foloseste extensia de sintaxa legare functie. Aceasta extensie adauga un operator :: la JavaScript, care leaga functiile care urmeaza de obiecte imediat inainte.

Avertismente

Aceasta extensie de sintaxa este experimentala – nu este nici macar in nicio specificatie, doar o propunere care se intampla sa aiba o transformare disponibila in Babel.

La fel, acest lucru este un punct de vedere tehnic un abuz al acestui lucru; sintaxa implicita profita de faptul ca operatorul de legare implicit face un apel la metoda de legare a ceea ce se presupune ca este o functie furnizata si in schimb returneaza conversia de unitate implicita in aceste cazuri.

De asemenea, din punct de vedere tehnic, propunerea de legare a functiei sugereaza ca sintaxa verifica daca functia trecuta este apelabila, dar transformarea lui Babel nu testeaza acest lucru. Metrick foloseste in schimb un obiect care se intampla sa aiba o metoda de legare, astfel incat aceasta abordare speciala se poate rupe in versiuni viitoare mai stricte ale transformarii – dar speram ca nu!