当我们启动一种新语言,一种新技术时,我们总是寻求与我们所知道的联系。当我将自己与类型脚本相提并论,并来自世界。NETC#时,我开始提出这些语言之间的差异和共同点。
打字什么?
打字稿是Microsoft(github source)检测和维护的开源语言,在Apache许可证2下。粗javascript。我将报价编译为编译,因为它不是C#中的汇编,而是JavaScript代码中的代码TypeCript的转换( transpiler )。
javaScript中“编译”典型文件的命令是:
tsc nomDuFichier.ts
.
该命令将是同名的文件,但在JS(JavaScript)中。
但是,如果腔体输出javascript输出,为什么类型脚本?
JavaScript是一种动态典型的语言。在某些情况下,这种有助于变量衰减的特征可以导致iNtage resorts。打字稿中的静态类型系统使得可以得出对象的形式,允许类型验证代码的正确功能。线条更加严格,具有强大的打字,突然在代码的代码中可以看到错误,而不是在测试/产品的末尾看到错误。
比较
我将把代码放在C#与Typescript方向上的两种语言中进行比较。要测试代码的提示,您可以与C#dotnet script的Visual Studio代码一起使用(请参阅mon post sur le sujet)和类型脚本:deno.land或直接与Playground在线。
变量
// C#
// Déclarer une variable
var unNombre = 12345;
var unBlabla = "Faire du blabla";
// équivaut à :
int unNombre = 12345;
string unBlabla = "Faire du blabla";
// Utilisation des constantes
const int unAutreNombre = 123456;
unAutreNombre = 123456; // ---> Exception
// TYPESCRIPT
// Déclarer une variable
let unNombre = 12345;
let unBlabla = "Faire du blabla";
// équivaut à :
let unNombre : number = 12345;
let unBlabla : String = "Faire du blabla";
// Utilisation des constantes
const unAutreNombre = 123456;
unAutreNombre = 123456; // ---> Exception
在c#中,我们可以使用clavede1(doc Microsoft)一词来澄清变量。 CAF是在编译时,编译器将为变量选择合适的类型,但我们也可以显式地说,直接表明该类型。我个人会假装,没有歧义。对于types primitifs sur TS。
在TS中,咖啡馆是欺骗变量的clavede2一词,不需要初始化nâ。还有var
,它要关注“函数”,而let
则携带在块上。
对于两种语言,const
表示汽车是常数。
状况
如果别的
// C#
int x = 10;
int y = 20;
if (x > y)
{
Console.WriteLine("x est plus grand que y.");
}
else
{
Console.WriteLine("x est inférieur ou égal à y.");
}
// TYPESCRIPT
let x: number = 10;
let y: number = 20;
if (x > y)
{
console.log('x est plus grand que y.');
}
else
{
console.log('x est inférieur ou égal à y.');
}
转变
// C#
short day = 4;
switch (day) {
case 1:
console.log("C'est lundi");
break;
case 2:
console.log("C'est mardi");
break;
case 3:
console.log("C'est mercredi");
break;
case 4:
console.log("C'est jeudi");
break;
case 5:
console.log("C'est vendredi");
break;
case 6:
console.log("C'est samedi");
break;
case 7:
console.log("C'est dimanche");
default:
console.log("Euhh... y a une coui(biiiip) dans le pâté");
break;
}
// TYPESCRIPT
let day : number = 4;
switch (day) {
case 1:
console.log("C'est lundi");
break;
case 2:
console.log("C'est mardi");
break;
case 3:
console.log("C'est mercredi");
break;
case 4:
console.log("C'est jeudi");
break;
case 5:
console.log("C'est vendredi");
break;
case 6:
console.log("C'est samedi");
break;
case 7:
console.log("C'est dimanche");
default:
console.log("Euhh... y a une coui(biiiip) dans le pâté");
break;
}
带扣
为了
// C#
for (var i = 0; i < 3; i++)
{
Console.WriteLine("Numéro de i = " + i);
}
// TYPESCRIPT
for (let i = 0; i < 3; i++)
{
console.log ("Numéro de i = " + i);
}
foreach
// C#
int[] collection = {10,20,30,40};
foreach(var item in collection) {
Console.WriteLine(item);
}
// TYPESCRIPT
let collection = [10, 20, 30, 40];
for (var item of collection) {
console.log(item);
}
尽管
// C#
int i = 1;
while (i < 4) {
Console.WriteLine( "J'en suis à :" + i );
i++;
}
// TYPESCRIPT
let i: number = 1;
while (i < 4) {
console.log( "J'en suis à :" + i )
i++;
}
MES/功能
// C#
// Fonction sans paramètre ni retour.
public void Display()
{
Console.WritleLine("Hello de C# !");
}
// TYPESCRIPT
// Fonction sans paramètre ni retour.
function display()
{
console.log("Hello de TypeScript!");
}
// pareil que
function display() : void
{
console.log("Hello de TypeScript!");
}
类型返回到TS中的TS,将自己放在参数之后。
function NomDeLaFonction (nomParameter: type,...) : typeRetour { ... }
如果没有回报,则不需要添加返回类型,但是我们可以说!返回void
存在。我喜欢穿上它,CAF明确!
// C#
public string Greet(string greeting, string name)
{
return greeting + " " + name + "!";
}
// Avec paramètre optionnel.
public string Greet(string greeting, string name = null)
{
return greeting + " " + name + "!";
}
// Avec un paramètre par défaut
public string Greet(string name, string greeting = "Hello")
{
return greeting + " " + name + "!";
}
// TYPESCRIPT
function Greet(greeting: string, name: string ) : string
{
return greeting + ' ' + name + '!';
}
// Avec paramètre optionnel.
function Greet(greeting: string, name?: string ) : string
{
return greeting + ' ' + name + '!';
}
// Avec un paramètre par défaut
function Greet(name: string, greeting: string = "Hello") : string
{
return greeting + ' ' + name + '!';
}
在TS中,必要的可选参数和参数之间存在差异。对于可选参数name?: string
,如果在呼吁该功能期间未指示参数nâ,则类型为undefined
。
班级
typeScript(doc sur Typescript.org)中的class
上的DOC。我将尝试将最多的代码结束。
// C#
public class Person
{
protected readonly string name;
// Pour montrer les niveaux de visibilité
public int age;
string numSecu; // --> défaut en private
public Person(string nom, int age, string secu)
{
name = nom;
age = age;
numSecu = secu;
}
}
public class Habitant : Person
{
public string Adresse { get; set; }
// Juste pour montrer en "Full"
private string _autreAdresse;
public string AutreAdresse
{
get { return _autreAdresse; }
set { _autreAdresse = value; }
}
public Habitant(string nom, int age, string secu, string adress)
: base(nom, age, secu) // Appel au constructeur de Person
{
Adresse = adress;
}
public void WhoAreYou()
{
Console.WriteLine($"Je suis " + this.name + " et j'habite au " + this.Adresse);
}
}
// TYPESCRIPT
class Person
{
// Fields
protected readonly name: string;
// Pour montrer les niveaux de visibilité
age: number; // --> défaut en public
private numSecu: string;
constructor(nom: string, age: number, secu: string)
{
this.name = nom;
this.age = age;
this.numSecu = secu;
}
}
class Habitant extends Person
{
// Field
_adresse: string;
// Getter et Setter
get adresse() {
return this._adresse;
}
set adresse(value) {
this._adresse = value;
}
// Constructeur
constructor(nom: string, age: number, secu: string, adress: string)
{
// super : pour faire appel au constructeur de Person.
super(nom, age, secu);
this._adresse = adress;
}
public whoAreYou () : void
{
console.log("Je suis " + this.name + " et j'habite au " + this.adresse)
}
}
// Utilisation de la class
let hab : Habitant = new Habitant("Jean", 25, "15151548", "la bas");
hab.whoAreYou();
在c#或ts中,存在一些差异,但仍然很接近。
界面
好的汽车是我在C#和TS之间发现的很大差异。
接口为类型
// TYPESCRIPT
interface Person {
name: string;
age: number;
}
let quiEstce: Person = { name:"Jean", age:25 };
CAF是C#中的一个简单的POCO对象。只有没有thode的专有人来添加“行为”。
与C相比,“经典”接口
// C#
interface Person
{
name: string;
age: number;
// Déclare une fonction
getAnneeNaissance(anneeEnCours: Date) : number;
}
我们可以用专有性和螨虫阐明界面,这将与一类有关。
接口作为函数类型
Lâtypript接口也用于完成一种类型的函数。这保证了功能的签名。
// TYPESCRIPT
// Interface comme type de fonction
interface Person
{
name: string;
age: number;
}
createPerson(name: string, age: number) : void
{
// code de création
Person
}
let unePersonne: Person = createPerson;
在TS中:接口为对象提供了结构。他们可以犹豫其他界面和班级。
在C#中:接口是含义类别的合同。他们只能容纳其他界面。
还有所有这一切?
c#腔的伟大力量之一是LINQ,那是什么相同的东西?
好吧!
在哪里
// C#
Person jean = new Person() { Name="Jean", Age=42, Sexe="homme"};
Person gisel = new Person() { Name="Giselle",Age=52,Sexe="femme"};
Person marcel = new Person() { Name="Marcel", Age=25,Sexe="homme"};
Person marion = new Person() { Name="Marion", Age=28, Sexe="femme"};
Person[] allPeople = new Person[] { jean,gisel, marcel, marion };
var selectedPerson = allPeople.Where(x => x.Sexe == "homme");
foreach (var person in selectedPerson)
{
Console.WriteLine(person.Name);
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Sexe { get; set; }
}
// TYPESCRIPT
interface Person{
name: string;
age: number;
sexe: string;
}
let allPeople : Person[] = [{name:"Jean", age: 42, sexe:"homme"},
{name:"Marcel", age: 25, sexe:"homme"},
{name:"Giselle", age:52, sexe:"femme"},
{name:"Marion", age:28, sexe:"femme"}]
// utiliser "filter"
let selectedPerson = allPeople.filter(x => x.sexe === 'homme');
for(let person of selectedPerson)
{
console.log(person.name);
}
任何
// C#
bool found = allPeople.Any(x => x.age == 25);
// TYPESCRIPT
boolean found = (allPeople.findIndex(x => x.age === 25) >= 0);
firstordEfault
// C#
var person = allPeople.FirstOrDefault(x => x.Name == "Jean");
// TYPESCRIPT
let person = allPeople.find(x => x.name === "Jean");
得出结论
我没有把所有内容都放在所有语言中,而且汽车实际上是在日常使用中,而且从长远来看,我们掌握了一种语言,但是我们可以看到两种语言非常接近。