国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - C# - C# 是 TypeScript 的最佳替補(bǔ)?

C# 是 TypeScript 的最佳替補(bǔ)?

2021-12-29 00:42晃來(lái)晃呿 C#

TypeScript非常優(yōu)秀。它完美地結(jié)合了強(qiáng)類型和快速開(kāi)發(fā),因此非常好用,我在許多情況下都會(huì)默認(rèn)選擇這個(gè)庫(kù)。但是,世上沒(méi)有完美的語(yǔ)言,有些情況下TypeScript并不是最合適的工具。

C# 是 TypeScript 的最佳替補(bǔ)?

TypeScript非常優(yōu)秀。它完美地結(jié)合了強(qiáng)類型和快速開(kāi)發(fā),因此非常好用,我在許多情況下都會(huì)默認(rèn)選擇這個(gè)庫(kù)。但是,世上沒(méi)有完美的語(yǔ)言,有些情況下TypeScript并不是最合適的工具:

  • 性能至關(guān)重要(例如實(shí)時(shí)通信、視頻游戲)
  • 需要與原生代碼(如C/C++或Rust)交互
  • 需要更嚴(yán)格的類型系統(tǒng)(例如金融系統(tǒng))

對(duì)于這些情況,TypeScript開(kāi)發(fā)人員最好還是選用其他語(yǔ)言。C#、Go和Java都是非常好的選擇。它們的速度遠(yuǎn)超 TypeScript,每種語(yǔ)言都有自己的長(zhǎng)處。C#能與TypeScript配合得很好,我來(lái)解釋一下為什么。

TypeScript 就是添加了 C# 的 JavaScript

C#能與TypeScript配合得很好,因?yàn)樗鼈兛瓷先ゾ拖袷峭环N語(yǔ)言。兩者都是由Anders Hejlsberg設(shè)計(jì)的,而且從許多方面來(lái)看,TypeScript就是添加了C#的JavaScript。它們的特性和語(yǔ)法都很相似,因此在同一個(gè)項(xiàng)目中結(jié)合使用二者非常容易。更重要的是,C#的語(yǔ)言與TypeScript很相似,因此開(kāi)發(fā)人員閱讀和編寫代碼也非常輕松。

相反,Go是一種完全不同的語(yǔ)言:沒(méi)有類,沒(méi)有繼承,沒(méi)有異常,沒(méi)有包級(jí)別的封裝(只有類級(jí)別的封裝),而且語(yǔ)法也完全不同。當(dāng)然這并不一定是壞事,但開(kāi)發(fā)人員的確需要重新思考并用不同的方式設(shè)計(jì)代碼,因此,同時(shí)使用Go和TypeScript是比較困難的。不過(guò),Java與C#很相似,但依然缺乏許多C#和TypeScript都有的功能。

C#和TypeScript的相似之處

也許你已經(jīng)知道,C#和TypeScript有很多相似之處,如基于C的語(yǔ)法、類、接口、泛型等。下面,我來(lái)詳細(xì)列舉一下二者的相似之處:

  • async/await
  • lambda表達(dá)式和函數(shù)式數(shù)組方法
  • 用于處理空的操作符(?,!,??)
  • 解構(gòu)
  • 命令行界面(CLI)

async/await

首先,C#和JavaScript都使用async/await來(lái)處理異步代碼。在JavaScript中,異步操作用Promise表示,而應(yīng)用程序可以await一個(gè)異步操作結(jié)束。C#中的Promise其實(shí)是Task,概念上與Promise完全相同,也有相應(yīng)的方法。下面的例子演示了兩種語(yǔ)言中async/await的用法:

  1. async function fetchAndWriteToFile(url: string, filePath:string): Promise {
  2. // fetch() returns aPromise
  3. const response = awaitfetch(url);
  4. const text = awaitresponse.text();
  5. // By the way, we'reusing Deno (https://deno.land)
  6. awaitDeno.writeTextFile(filePath, text);
  7. return text;
  8.  
  9. using System.IO;
  10. using System.Net.Http;
  11. using System.Threading.Tasks;
  12.  
  13. async Task FetchAndWriteToFile(string url, stringfilePath) {
  14. // HttpClient.GetAsync()returns a Task
  15. var response = await newHttpClient().GetAsync(url);
  16. var text = awaitresponse.Content.ReadAsStringAsync();
  17. awaitFile.WriteAllTextAsync(filePath, text);
  18. return text;
  19. }

下面是JavaScript的Promise API與等價(jià)的C# Task API:

C# 是 TypeScript 的最佳替補(bǔ)?

Lambda表達(dá)式和函數(shù)式數(shù)組方法

C#和JavaScript都用熟悉的=>語(yǔ)法(即箭頭函數(shù))來(lái)表示lambda表達(dá)式。下面是TypeScript和C#的比較:

  1. const months = ['January', 'February', 'March', 'April'];
  2. const shortMonthNames = months.filter(month => month.length< 6);
  3. const monthAbbreviations = months.map(month =>month.substr(0, 3));
  4. const monthStartingWithF = months.find(month => {
  5. returnmonth.startsWith('F');
  6. });

TypeScript中使用lambda表達(dá)式

  1. using System.Collections.Generic;
  2. using System.Linq;
  3.  
  4.  
  5. var months = new List {"January","February", "March", "April"};
  6. var shortMonthNames = months.Where(month => month.Length <6);
  7. var monthAbbreviations = months.Select(month =>month.Substring(0, 3));
  8. var monthStartingWithF = months.Find(month => {
  9. returnmonth.StartsWith("F");
  10. });

C#中使用lambda表達(dá)式

上述示例演示了C#的System.Linq命名空間中的一些方法,相當(dāng)于JavaScript的函數(shù)式數(shù)組方法。下面是JavaScript的數(shù)組方法與等價(jià)的C# Linq方法:

C# 是 TypeScript 的最佳替補(bǔ)?

性能:C#很快。C#的ASP.NET Web框架一直在Techempower的評(píng)測(cè)中名列前茅,而C#的.NET CoreCLR運(yùn)行時(shí)的性能每個(gè)主要版本都在提高。C#擁有優(yōu)良性能的原因之一是,通過(guò)使用結(jié)構(gòu)而不是類,應(yīng)用程序可以最小化甚至完全消除垃圾回收。因此,C#在視頻游戲編程中非常流行。

游戲和混合現(xiàn)實(shí):C#是游戲開(kāi)發(fā)最流行的語(yǔ)言之一,像Unity、Godot甚至Unreal游戲引擎都使用了C#。C#在混合現(xiàn)實(shí)中也很流行,因?yàn)閂R和AR應(yīng)用程序都是用Unity編寫的。

由于C#擁有第一方庫(kù)、工具和文檔,因此一些任務(wù)非常容易實(shí)現(xiàn),比如,在C#中創(chuàng)建gRPC客戶端要比TypeScript方便得多。相反,在Node.js中使用TypeScript時(shí),就必須找出正確的模塊和工具的組合,才能正確地生成JavaScript gRPC客戶端,以及相應(yīng)的TypeScript類型。

高級(jí)功能:C#有許多其他語(yǔ)言沒(méi)有的功能,如運(yùn)算符重載、析構(gòu)函數(shù)等。

如前所述,世上沒(méi)有完美的語(yǔ)言。在設(shè)計(jì)語(yǔ)言時(shí)總要有所權(quán)衡,所以一些語(yǔ)言的速度更快,但使用難度會(huì)增加(例如Rust的借出檢查)。另一方面,一些語(yǔ)言非常易用,但通常性能的優(yōu)化難度就會(huì)增加(例如JavaScript的動(dòng)態(tài)語(yǔ)言特性)。正因如此,我相信掌握一組相似的語(yǔ)言會(huì)非常有用:這些語(yǔ)言分別有各自的長(zhǎng)處,但都很相似,而且能互相配合。例如,下面是我選擇的一組語(yǔ)言:

TypeScript

  • 最高層的語(yǔ)言,開(kāi)發(fā)速度最快
  • 性能并非最佳,但適用于大多數(shù)應(yīng)用
  • 不太適合與原生代碼結(jié)合

C#

  • 仍然是高級(jí)語(yǔ)言,支持垃圾回收,所以很容易使用,盡管并不如TypeScript那么容易。
  • 從速度和內(nèi)存占用量來(lái)看,其性能都優(yōu)于 TypeScript
  • 最重要的是,能夠與底層很好地結(jié)合

C++

  • 開(kāi)發(fā)難度較大(例如需要手動(dòng)內(nèi)存管理),因此開(kāi)發(fā)速度會(huì)慢很多
  • 但運(yùn)行時(shí)的性能最佳!而且隨處可用,能與許多已有的軟件相結(jié)合
  • 很像C#,而且標(biāo)準(zhǔn)庫(kù)很好,但也有許多陷阱(大多數(shù)與內(nèi)存管理有關(guān))。我更希望使用Rust,因?yàn)樗膬?nèi)存安全性更好,但我的許多工作都要與已有的C++代碼結(jié)合,因此使用C++會(huì)更容易。

原文地址:https://www.toutiao.com/a7046275616781615655/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产日韩精品视频 | 一级毛片视频 | 亚洲精品成人 | 最新国产在线 | 成人h免费观看视频 | 精品国产一区二区在线 | 男人午夜视频在线观看 | 免费观看一区二区三区毛片软件 | 久久av资源| 亚洲久久久久 | 日韩国产在线观看 | 国产日韩欧美 | 美女毛片 | 欧美视频免费看 | 国产成人精品久久二区二区 | 欧美日韩一二三区 | 亚洲无线观看 | 久久久美女 | 国精产品99永久一区一区 | 欧美成人精品一区二区三区 | 亚洲成人精品久久久 | 精品国产999| 成人片免费看 | 日韩欧美精品一区 | 久久成人免费视频 | 水密桃av | 一级做a爰性色毛片免费1 | 日韩电影在线看 | 免费观看一区二区三区毛片 | 欧美 日韩 中文 | 91麻豆精品国产91久久久久久久久 | 日日久| 国产一区二区视频免费看 | 亚洲精品久久久一区二区三区 | 欧美日韩国产一区二区三区不卡 | 夜夜夜夜夜操 | 在线观看一区二区三区视频 | 欧美日韩免费 | 91精品久久久久久久久中文字幕 | 日韩第一区 | 一级黄色大片免费观看 |