国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 后端開發(fā) php教程 動態(tài)語言中靜態(tài)類型的諷刺

動態(tài)語言中靜態(tài)類型的諷刺

Nov 03, 2024 am 06:28 AM

您也可以在 Medium 上閱讀這篇文章。

當我們看到編程語言如何隨著時間的推移而演變時,總是很有趣。

曾幾何時,當我開始進入軟件開發(fā)世界時,Python、PHP 和 JavaScript 等動態(tài)語言因其靈活性和適合快速開發(fā)的簡潔語法而受到贊賞。

然而,隨著這些弱類型語言的發(fā)展,它們?nèi)诤狭藦婎愋驼Z言的特性,使它們與 C 和 Java 非常相似:

  • Python:自 2015 年版本 3.5 開始引入類型提示功能,并在 2022 年版本 3.12 中得到增強。
  • PHP:2015 年版本 7 中引入的聲明類型。
  • JavaScript:通過 2012 年 TypeScript 的發(fā)布進行了擴展,定義為“具有類型語法的 JavaScript”。

為什么會有這樣的轉(zhuǎn)變?

在嚴格類型語言中,我們在代碼中顯式定義變量的類型。目標是在執(zhí)行程序之前捕獲開發(fā)階段的錯誤,并向編譯器提供有關(guān)分配給這些變量的內(nèi)存大小的提示。

// C++ example: 'y' will be an integer
float x = 3.14;
int y = x;  //  y = 3 (ignored the decimal part of the number)

另一方面,動態(tài)類型語言(例如 Python、PHP 和 JavaScript)允許我們創(chuàng)建變量并讓解釋器在運行時暗示它們的類型:

# In python and PHP: 'y' will take the same type as 'x'
x = 3.14
y = x  // y = 3.14 (float)

動態(tài)語言中如何引入顯式類型?

在下面的示例中,我們使用動態(tài)和靜態(tài)類型聲明相同的函數(shù)。

Python:

# using the classic syntax:
def add(x, y):
    return x + y
# using explicit typing:
def add(x: int, y:int) -> int:
    return x + y

JavaScript / TypeScript:

// using the classic syntax
function add(x, y) {
    return x + y;
}
// using explicit typing
function add(x: number, y: number): number {
    return x + y;
}

PHP:

// using the classic syntax:
function add($x, $y) {
    return $x + $y;
}
// using explicit typing:
function add(int $x, int $y): int {
    return $x + $y;
}

PHP 8.2(于 2022 年 12 月發(fā)布)通過引入對 null、true 和 false 作為獨立類型的支持來進一步推動它:

public null $nil = null;
public false $false = false;`

諷刺在哪里?

不要將這篇文章視為對這些新功能的反對,我確實承認使用嚴格類型語言的優(yōu)勢。然而,例如,在 Python 中使用類型注釋并不能阻止您更改變量的類型:

x: int = 0
x = "John" 
print(type(x))   # <class 'str'>

PHP 也一樣,它只會在控制臺上打印 Deprecated 警告。

有人可能會問為什么解釋器允許我們執(zhí)行這段代碼?
這是因為這些語言是這樣構(gòu)建的:它們根據(jù)定義是動態(tài)類型的。如果我們刪除這個特性,它們將不再是動態(tài)的;它們將成為像 C 一樣的嚴格類型語言,但速度較慢。

希望您可以通過在 PHP 文件中將 strict_types 設(shè)置為 true 來要求解釋器更加嚴格:

declare(strict_types=1);

在 python 中,您可以使用“mypy”包來分析代碼并捕獲錯誤:

// C++ example: 'y' will be an integer
float x = 3.14;
int y = x;  //  y = 3 (ignored the decimal part of the number)

您可以看到“mypy”作為顧問,告訴您做錯了什么,但這并不能阻止您執(zhí)行代碼,風險由您承擔。

The Irony of Static Typing in Dynamic Languages

即使您不確定變量的類型,您仍然可以使用聯(lián)合運算符來減少接受類型的列表:

以下來自 PHP 和 Python 的示例展示了如何做到這一點:

# In python and PHP: 'y' will take the same type as 'x'
x = 3.14
y = x  // y = 3.14 (float)

我們是否犧牲了代碼的可讀性?

十年前,我決定使用 Python 攻讀博士學位,因為它簡單且能夠快速構(gòu)建新想法原型。然后我也開始將它用于我的其他項目。

現(xiàn)在,我發(fā)現(xiàn)自己閱讀了一些奇怪的 PEP,并質(zhì)疑自己是否真的值得通過包含這些新功能來使我的代碼庫復雜化。

讓我們看一個打印字典項目的示例函數(shù)。這是初始版本:

# using the classic syntax:
def add(x, y):
    return x + y
# using explicit typing:
def add(x: int, y:int) -> int:
    return x + y

通過使用 Python 3.12 中引入的 PEP 692 的建議,代碼變?yōu)椋?br>

// using the classic syntax
function add(x, y) {
    return x + y;
}
// using explicit typing
function add(x: number, y: number): number {
    return x + y;
}

總結(jié):我們創(chuàng)建了一個繼承自 TypedDict 的類,指定了每個項目的名稱和類型,并使用 Unpack 運算符告訴“mypy”接收到的對象是一個 TypedDict。

結(jié)果,我們的代碼大小增加了一倍。如果我們的對象有更多的項目,它會變得更長。

幸運的是,我們可以對代碼的某些部分使用靜態(tài)類型,而將其余部分保留為動態(tài)類型。或者,如果我們愿意,我們可以選擇根本不使用它。

The Irony of Static Typing in Dynamic Languages

我們什么時候應該使用它?

不要因為學到了一個新的、閃亮的功能而感到有重寫整個代碼庫的壓力。

這些新功能就像工具。我的建議是明智地使用它們:

在以下場景中使用靜態(tài)類型:

  • 從外部源(例如數(shù)據(jù)庫、庫和 API)檢索數(shù)據(jù)時。
  • 代碼中不允許失敗的關(guān)鍵部分。
  • 當您的代碼庫容易出現(xiàn)頻繁錯誤時。

在以下情況下避免使用靜態(tài)類型:

  • 設(shè)計原型以快速測試您的想法。
  • 實現(xiàn)內(nèi)部邏輯,其中類型檢查只會導致冗長的代碼,沒有任何好處。
  • 僅在屏幕上顯示數(shù)據(jù)(例如繪制圖表、圖像、數(shù)字......)。
  • 編寫無需用戶輸入的命令行腳本。

請記住,在編碼方面,黃金法則始終是力求簡單,除非您有充分的理由使事情復雜化。

以上是動態(tài)語言中靜態(tài)類型的諷刺的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

如何設(shè)置PHP時區(qū)? 如何設(shè)置PHP時區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

編寫清潔和可維護的PHP代碼的最佳實踐是什么? 編寫清潔和可維護的PHP代碼的最佳實踐是什么? Jun 24, 2025 am 12:53 AM

寫干凈、易維護的PHP代碼關(guān)鍵在于清晰命名、遵循標準、合理結(jié)構(gòu)、善用注釋和可測試性。1.使用明確的變量、函數(shù)和類名,如$userData和calculateTotalPrice();2.遵循PSR-12標準統(tǒng)一代碼風格;3.按職責拆分代碼結(jié)構(gòu),使用MVC或Laravel式目錄組織;4.避免面條式代碼,將邏輯拆分為單一職責的小函數(shù);5.在關(guān)鍵處添加注釋并撰寫接口文檔,明確參數(shù)、返回值和異常;6.提高可測試性,采用依賴注入、減少全局狀態(tài)和靜態(tài)方法。這些做法提升代碼質(zhì)量、協(xié)作效率和后期維護便利性。

如何使用PHP執(zhí)行SQL查詢? 如何使用PHP執(zhí)行SQL查詢? Jun 24, 2025 am 12:54 AM

Yes,youcanrunSQLqueriesusingPHP,andtheprocessinvolveschoosingadatabaseextension,connectingtothedatabase,executingqueriessafely,andclosingconnectionswhendone.Todothis,firstchoosebetweenMySQLiorPDO,withPDObeingmoreflexibleduetosupportingmultipledatabas

如何快速測試PHP代碼片段? 如何快速測試PHP代碼片段? Jun 25, 2025 am 12:58 AM

toquicklytestaphpcodesnippet,useanonlinephpsandboxlike3v4l.orgorphpize.onlineforinstantantantExecutionWithOutSetup; runco??delocalocallocallocallocallocallocallywithpplibycreatinga.phpfileandexecutingitviateringitviatheterminal;

如何在PHP中使用頁面緩存? 如何在PHP中使用頁面緩存? Jun 24, 2025 am 12:50 AM

PHP頁面緩存可通過減少服務器負載和加快頁面加載速度提升網(wǎng)站性能。1.基本文件緩存通過生成靜態(tài)HTML文件并在有效期內(nèi)提供服務,避免重復生成動態(tài)內(nèi)容;2.啟用OPcache可將PHP腳本編譯為字節(jié)碼存儲在內(nèi)存中,提升執(zhí)行效率;3.對帶參數(shù)的動態(tài)頁面,應根據(jù)URL參數(shù)分別緩存,并避免緩存用戶特定內(nèi)容;4.可使用輕量級緩存庫如PHPFastCache簡化開發(fā)并支持多種存儲驅(qū)動。結(jié)合這些方法能有效優(yōu)化PHP項目的緩存策略。

如何升級PHP版本? 如何升級PHP版本? Jun 27, 2025 am 02:14 AM

升級PHP版本其實不難,但關(guān)鍵在于操作步驟和注意事項。以下是具體方法:1.確認當前PHP版本及運行環(huán)境,使用命令行或phpinfo.php文件查看;2.選擇適合的新版本并安裝,推薦8.2或8.1,Linux用戶用包管理器安裝,macOS用戶用Homebrew;3.遷移配置文件和擴展,更新php.ini并安裝必要擴展;4.測試網(wǎng)站是否正常運行,檢查錯誤日志確保無兼容性問題。按照這些步驟操作,大多數(shù)情況都能順利完成升級。

在Linux上配置PHP開發(fā)環(huán)境的步驟 在Linux上配置PHP開發(fā)環(huán)境的步驟 Jun 30, 2025 am 01:57 AM

TosetupaPHPdevelopmentenvironmentonLinux,installPHPandrequiredextensions,setupawebserverlikeApacheorNginx,testwithaPHPfile,andoptionallyinstallMySQLandComposer.1.InstallPHPandextensionsviapackagemanager(e.g.,sudoaptinstallphpphp-mysqlphp-curlphp-mbst

PHP初學者指南:當?shù)丨h(huán)境配置的詳細說明 PHP初學者指南:當?shù)丨h(huán)境配置的詳細說明 Jun 27, 2025 am 02:09 AM

要設(shè)置PHP開發(fā)環(huán)境,需選擇合適的工具并正確安裝配置。①最基礎(chǔ)的PHP本地環(huán)境需要三個組件:Web服務器(Apache或Nginx)、PHP本身和數(shù)據(jù)庫(如MySQL/MariaDB);②推薦初學者使用集成包如XAMPP或MAMP,它們簡化了安裝流程,XAMPP適用于Windows和macOS,安裝后將項目文件放入htdocs目錄并通過localhost訪問;③MAMP適合Mac用戶,支持便捷切換PHP版本,但免費版功能有限;④高級用戶可用Homebrew手動安裝,在macOS/Linux系統(tǒng)中

See all articles