Flag

立flag?有貓膩?flag概念在程式語言的應用

Johnny Fang
4 min readNov 5, 2022

最後更新時間:2022–11–07

貓是不是很喜歡躲起來偷看人? | Photo by Daria Shatova on Unsplash

立flag是啥啦

現在是2022年,但我才第一次聽到立flag,心想,三小,怎麼突然出現一個沒聽過的詞,就跟我第一次聽到貓膩時的反應一樣(話說,請試著想想看,當一個學中文的外國人看到貓膩這個詞時會有多可憐,不僅字難寫,也超難理解字面意思,啊,可憐吶)

後來去查了一下,維基百科說「立flag,一個網絡流行詞,意思是指振振有詞以表雄心,或者立下目標,卻為後續事件適得其反做鋪墊。」

例如
早上出門時說「今天天氣真不錯!」,結果後來下雨
「這場我一定要把對手電爆」,結果被電爆的是自己
「我一定要成為海賊王!」,結果後來成為獵人(Wait, what?)

flag概念在程式語言的應用

其實我是在學coding時看到這個詞,先不論這個網路流行語到底哪來的,flag的概念確實可以用在coding。很簡單,旗子舉起來(on),旗子放下(off),就是一個開關的概念,可以指定一個變數,讓它平常是off的狀態,特定條件觸發時就變成on,好讓其他函式藉由判斷這個開關是on還是off,來去做後續的動作。

flag應用舉例

以下隨便舉個例

let flag = 0let personality = ['1', '2', '78', '3']for (let i = 0; i < personality.length; i++) {
if (personality[i] === '78') {
flag = 1
}
}
if (flag === 1) {
console.log('扁他!')
}

最一開始flag是關閉的,如果某主管有時狀態是1、有時是2,但有時是78,只要這個主管曾出現78狀態,flag就會被開啟,那如果flag被開啟,就印出「扁他!」,因此,不僅flag立起來,拳頭也跟著舉起來(這例子果然很隨便)。

再隨便看個例子(這次比較沒那麼隨便)
本週學到一課,就是Array.some() 底層也是用 for 迴圈實現的
Array.some() 簡單說就是去檢測一個陣列裡是否包含我想找的東西,如果有就回傳true

*Array.some()是什麼:

概念大概是這樣:

let players = [
{id: 'A'},
{id: 'B'},
{id: 'C'},
]
let spyList = [
{id: 'C'},
{id: 'D'},
{id: 'E'},
]
let isSpyHere = falsefor (let i = players.length - 1; i >= 0; i--) {
for (let j = 0; j < spyList.length; j++) {
if (spyList[j].id === players[i].id) {
isSpyHere = true
}
}
}
if (isSpyHere) {
console.log('扁他!')
} else {
console.log('Safe!')
}

假設現在面前有一群玩家,同時我手上有間諜名單,我想檢測這群玩家裡是不是有間諜,我就設置一個開關叫 isSpyHere,接下來用迴圈去檢測,當有任一玩家的id跟我手上的間諜id一樣(假設每個人id是獨一無二的),代表這群玩家裡有間諜,就讓 isSpyHere 這個開關打開,然後迴圈跑完之後再用 if() 去決定開關分別在開與關的狀態時要執行什麼動作,所以如果抓到間諜,我就「扁他!」(到底多愛扁人)。

文章寫完後發現其實flag跟貓膩也有點關聯
當事有蹊蹺(注音要打ㄑㄧㄠ才選得到詞)時,flag就會改變
okay,好像有點牽強。

大概是這樣,如果有什麼flag厲害的運用,也歡迎跟我這隻很菜的菜蟲分享。

--

--

Johnny Fang

把 Medium 當 Notion 用,寫一下 coding 學習筆記 | email: johnny781222@gmail.com | LinkedIn: www.linkedin.com/in/johnny-fang-9356b2156 | Discord 使用者名稱:johnnyfang