編程基礎:編碼中 ++ 是什么意思?
那么,你剛開始編程,你想知道人們在變量旁邊加上 ++ 是什么意思。它是否像電池一樣為變量增加了額外的電量?它是否給該變量帶來了更積極的前景?也許它就像在考試中得到 A++ 一樣,表明變量的表現非常好?
在本文中,我們將討論 ++ 在編碼時的真正含義、如何使用它,甚至深入研究在并發方面可能想要使用的該運算符的替代方案。
編程中的 ++ 解釋
++ 是一種簡寫形式,用于將數字數據類型的值增加 1。因此,如果您有一個名為candles且其值為 16 的變量,則可以寫candles++,這樣candles的值就為 17。這比寫出candles = candles + 1要容易得多。
在編程中,這稱為增加變量,這只是“將該值增加一定量”的俚語。默認情況下,這會將數值增加一。
那么,如果可以按照第二種方式寫出來,為什么還要使用 ++ 運算符呢?
- 它可以讓你的編碼更簡潔
- 您只需引用變量一次,而不是兩次(++ 稱為一元運算符,這意味著您只需要一個值即可使其成為有效表達式)
在不需要時多次引用變量是多余的,任何程序員都知道,冗余是應該始終避免的事情。此外,引用變量的次數越多,輸入錯誤的可能性就越大,從而增加了出錯的可能性。
那么,如果你想要將變量減少 1 而不是增加 1,該怎么辦?請繼續閱讀!
編碼中- - 是什么意思?
--用于將數值數據類型的值減一。其用法與 ++ 運算符相同。例如,如果burgers 的值為 5,而您想將其減一(大概是通過吃掉該漢堡來實現),您可以輸入burgers--,然后值將為 4(您也會因此吃得更飽。)
哪些語言使用 ++ 運算符?
++ 是 C、C++ 和 C# 等基于 C 語言的原生操作符。Java、Javascript 和 PHP 也支持 ++ 操作符。雖然 Swift 過去支持 ++ 和 -- 操作符,但不幸的是,這已被棄用。
哪些語言不使用 ++ 運算符?
截至撰寫本文時,Python、Ruby、Lua、Haskell、Rust 和 Elixir 等語言都不支持 ++ 運算符。這可能是由于它們的設計理念(并非所有人都認為 ++ 運算符簡單易懂或更具可讀性)或因為它們是具有不可變變量的函數式語言,因此遞增沒有意義。
編碼中 ++ 和 + 的區別
要記住的重要一點是 + 是算術運算符,而 ++ 既是算術運算符又是賦值運算符。這是什么意思?嗯,前者會為您計算一個方程式,而后者會計算結果并將其賦給包含新值的變量。
為了幫助說明差異,請考慮以下代碼,其中蠟燭等于 10。
int items = candles + 1;在這種情況下,蠟燭的價值仍為 10,而物品的價值現在等于 11。為什么不呢?因為 + 只是一個算術運算符。就像在數學課上一樣,將 a 和 b 相加不會改變 a 和 b 的值。
然而,有些事情并不像數學課那樣。例如,在編程中,您可以將新值分配給新變量,甚至可以更新現有變量的賦值。這使得 = 成為賦值運算符。
如前所述,++ 很特殊,因為它既是算術運算符,又是賦值運算符。這意味著candles++將 1 加到candles上,然后更新其賦值以包含該新值。
我可以使用 ++ 來增加二或更多而不是一嗎?
不。對于這種情況,您可以使用 += 運算符(如果要減少數字,則使用 -=)。例如,如果您輸入burgers += 2,這將使漢堡的數量增加 2。您可以更改數字以調整要增加的值的量。
編碼中 ++ 的最佳用例
1. 讓你的循環更高效
如果您見過循環,通常會看到 ++ 運算符。循環是一種在代碼中重復某些任務而無需反復編寫的方法。例如,在 Java 中,這可能看起來像這樣:
String[] names = { “John”, “Paul”, “George”, “Ringo” };
for (int index = 0; index < names.length; index++) {
System.out.println(names[index]);
}此循環將逐個打印出names中的每個名稱,如下所示:
John
Paul
George
Ringofor 循環的語法一開始可能有點復雜。但由于這可能是您在編程中第一次接觸 ++,因此讓我們來了解一下。如您所見,此 for 循環的聲明中有三個表達式,以分號分隔:
第一個是變量聲明int index = 0。它用于聲明循環從哪里開始。
第二個是變量比較index < name.length。它用于聲明循環何時停止。
第三個表達式是增量表達式index++。它用于在每次循環時更新索引
請記住,variable = variable + 1和variable++可以互換。這意味著我們可以假設以這種方式編寫相同的 for 循環:
String[] names = { “John”, “Paul”, “George”, “Ringo” };
for (int index = 0; index < names.length; index = index + 1) {
System.out.println(names[index]);
}由于這種循環在早期編程中相當常見,因此 ++ 運算符節省了大量的輸入。它還有助于使循環更具可讀性。
現代替代方案:增強 for 循環
一些語言增強了 for 循環語法,可以在內部管理此計數器。例如,在 Java 中,您可以編寫:
String[] names = { “John”, “Paul”, “George”, “Ringo” };
for (String name : names) {
System.out.println(name);
}當您不需要知道當前循環索引時,這是一個很好的簡化。
2. 計算數據
另一種常見的情況是跟蹤數據時使用 ++。許多應用程序希望跟蹤示例的性能和流量指標。它們可能有類似以下方法:
private int visitorCount;
// …
public void visitorVisitsWebsite() {
this.visitorCount++;
}此方法假設有一個類,例如 VisitorStatistics,用于跟蹤有關訪客的多個計數器。在這種情況下,我們可以這樣做:
public void visitorVisitsWebsite() {
this.visitorCount = this.visitorCount + 1;
}盡管使用 ++ 更簡潔。
在編碼中使用 ++ 作為前綴或后綴
++ 運算符有兩種使用形式:++變量(前綴運算符)和變量++(后綴運算符)。前綴(++變量)在表達式中使用變量之前增加值,而后綴(變量++)在表達式中使用變量之后增加值。
有什么區別?嗯,使用前綴版本,您可能希望在將值分配給其他內容之前增加該值。例如:
前綴
int x = 5;
int y = ++x;
在這種情況下,x增加到 6,然后 y設置為 6。
后綴
int x = 5;
int y = x++; 在這種情況下,y設置為 5,然后x增加到 6。
這在什么時候會有用?好吧,你可能有一段這樣的代碼,其中操作順序很重要:
int a = 32;
int b = a++;
// a is now 33, and b is now 32.
int c = ++a;
// a is now 34, and c is now 34.
需要避免的棘手 ++ 表達式
因為 ++ 讀起來和理解起來都相當棘手,所以你應該避免將它用作較大表達式的一部分。盡可能將它放在單獨的一行中。考慮一下,與之前的示例相比,下面的代碼可讀性要好得多:
int a = 32;
int b = a;
a++;
// a is now 33, and b is now 32.
a++;
int c = a;
// a is now 34, and c is now 34.現在不需要在更大的表達式中嵌入 ++,因為 b是 32,c是 34,這一點更加清楚。
++ 和并發問題
并發是指系統同時處理多個任務或操作的能力,而不必先執行一個任務再執行另一個任務。不幸的是,++ 運算符在這里可能會導致問題,因為當它被寫入字節碼時,它會被算作多條 CPU 指令
這個概念可能有點難以理解。這意味著如果兩個 CPU 幾乎同時調用同一條指令,您可能會丟失一些 ++ 增量命令。這在并發編程中 有時被稱為“ ABA 問題”。
為了演示,請考慮在以下情況下訪問者計數 (visitorCount) 可能發生的情況:
訪客數量 | 線程 A | 線程 B |
三十二 | 增量 (33) | |
33 | 商店 (33) | |
增量 (34) | ||
三十四 | 商店 (34) |
這一切看起來都很好,對吧?但如果兩個線程都發生這種情況怎么辦?
訪客數量 | 線程 A | 線程 B |
三十二 | 增量 (33) | |
| 增量 (33) | |
| 33 | 商店 (33) | |
| 商店 (33) |
|
在這種情況下,兩個線程都會在其中一個線程存儲其更新值之前讀取訪問者計數。這稱為丟失更新。
Java中++與并發的解決方案:AtomicInteger
如果您使用的是 Java,它有一個更適合多線程應用程序的功能,稱為 AtomicInteger。如果您將代碼更改為:
private AtomicInteger visitorCount = new AtomicInteger(0);
// …
public void visitorVisitsWebsite() {
this.visitorCount.increment();
}...這確保了算術運算和賦值運算不能分開。
結論
++ 在舊式循環、解析器和計數器編碼中非常常見。如果您決定使用它,請保持簡單。確保為增量提供自己的行和首選項后綴表示法。如果可以,請將其替換為現代對應項,例如增強型 for 循環或 AtomicInteger。
恭喜,您現在了解了 ++ 運算符的全部內容,并且比閱讀本文時更加了解。您可以再增加一分知識 — 給自己一個 A++!

請先 登錄后發表評論 ~