📌 #Concept: First-Class Functions
In languages like Go, Python, and Rust, functions are described as "First-Class." This is a fundamental concept in software engineering.
The term was coined by computer scientist Christopher Strachey in the mid-1960s. He drew a parallel to "citizenship."
In a society, a "First-Class Citizen" has full rights: they can own property, vote, and travel freely. A "Second-Class Citizen" has restrictions. In programming terms, if a function is "First-Class," it enjoys the same rights and privileges as primitive data types like an
🔆 Technical Definition
For a language to support first-class functions, it must allow functions to be:
1. Assigned to variables.
2. Passed as arguments to other functions.
3. Returned as values from other functions.
🔷 Example in Go
In Go, functions are values. In the example below, we treat the
💠 Why It Matters
This capability is the foundation of Higher-Order Functions (a function that operates on other functions). It allows developers to write flexible code, such as middleware in web servers (common in Go) by abstracting logic into passable parameters.
🔘 @TerminalNotes <- #programming
In languages like Go, Python, and Rust, functions are described as "First-Class." This is a fundamental concept in software engineering.
The term was coined by computer scientist Christopher Strachey in the mid-1960s. He drew a parallel to "citizenship."
In a society, a "First-Class Citizen" has full rights: they can own property, vote, and travel freely. A "Second-Class Citizen" has restrictions. In programming terms, if a function is "First-Class," it enjoys the same rights and privileges as primitive data types like an
integer or a string.In languages without first-class functions, a function is just a static block of code. It is distinct from data variables. You can call it, but you cannot store it in a variable or pass it directly to another function. Examples are: Java (Pre-version 8), Pascal, & Algol
🔆 Technical Definition
For a language to support first-class functions, it must allow functions to be:
1. Assigned to variables.
2. Passed as arguments to other functions.
3. Returned as values from other functions.
🔷 Example in Go
In Go, functions are values. In the example below, we treat the
add function just like an integer variable; we assign it and pass it around.package main
import "fmt"
func main() {
// 1. Assigning a function to a variable
// 'add' is now a variable holding a function
add := func(x, y int) int {
return x + y
}
// 2. Passing that variable to another function
process(add)
}
// This function accepts another function as a parameter
func process(operation func(int, int) int) {
result := operation(10, 5)
fmt.Println("Result:", result)
}
💠 Why It Matters
This capability is the foundation of Higher-Order Functions (a function that operates on other functions). It allows developers to write flexible code, such as middleware in web servers (common in Go) by abstracting logic into passable parameters.
🔘 @TerminalNotes <- #programming
📌 #concept: Populating
In software development, populating describes the process of taking an empty or partially initialized data structure and filling it with meaningful data. It is the bridge between "getting" data (fetching) and "using" data (rendering or processing).
Most applications follow a standard lifecycle for data handling:
1. Fetch: Retrieve raw data from a source (Database, API, JSON file).
2. Initialize: Create an empty container (List, Array, Map).
3. Populate: Iterate through the raw data and fill the container.
🔆 Analogy
Think of a form on a clipboard.
🔹 The Structure: The blank form with boxes for "Name" and "Age".
🔸 The Data: The person standing in front of you.
🔹 Populating: The act of asking them questions and writing the answers into the boxes.
🔷 Example in Go
Here we fetch raw IDs and use them to populate a list of User objects:
🔘 @TerminalNotes <- #programming
In software development, populating describes the process of taking an empty or partially initialized data structure and filling it with meaningful data. It is the bridge between "getting" data (fetching) and "using" data (rendering or processing).
Most applications follow a standard lifecycle for data handling:
1. Fetch: Retrieve raw data from a source (Database, API, JSON file).
2. Initialize: Create an empty container (List, Array, Map).
3. Populate: Iterate through the raw data and fill the container.
🔆 Analogy
Think of a form on a clipboard.
🔹 The Structure: The blank form with boxes for "Name" and "Age".
🔸 The Data: The person standing in front of you.
🔹 Populating: The act of asking them questions and writing the answers into the boxes.
🔷 Example in Go
Here we fetch raw IDs and use them to populate a list of User objects:
// 1. Initialize empty container
var activeUsers []User
// 2. Fetch raw data (simulated loop)
rawIDs := []int{1, 2, 3}
// 3. Populate
for _, id := range rawIDs {
newUser := User{ID: id, Name: "Guest"}
activeUsers = append(activeUsers, newUser)
}
🔘 @TerminalNotes <- #programming
اگر برنامهنویس Go هستید و الان به هر طریقی به دسترسی اینترنت دارید، میتونید داکیومنتهای stdlib رو لوکال در دسترس داشته باشید؛ با pkgsite میتونید مشابه pkg.go.dev مستندات رو روی سیستم خودتون بالا بیارید. نصب:
بعد از نصب، مطمئن بشید دایرکتوری باینریهای گولنگ توی PATH سیستمتون باشه، در غیر این صورت دستور pkgsite شناسایی نمیشه:
بعد وارد یک پروژه که فایل
حالا مستندات stdlib از آدرس زیر در دسترسه و میتونید سرچ کنید:
http://localhost:8080/std
💠 سبک تر کردن دانلود
اگر سورس Go رو روی سیستم دارید، مسیرش رو بدید تا نیازی به دانلود دوباره داک نباشه (که توی این وضعیت اذیت نکنه):
🔘 @TerminalNotes <- #programming #golang
go install golang.org/x/pkgsite/cmd/pkgsite@latest
بعد از نصب، مطمئن بشید دایرکتوری باینریهای گولنگ توی PATH سیستمتون باشه، در غیر این صورت دستور pkgsite شناسایی نمیشه:
export PATH="$PATH:$(go env GOPATH)/bin"
بعد وارد یک پروژه که فایل
go.mod داره بشین و دستور زیر رو اجرا کنید:pkgsite -open .
حالا مستندات stdlib از آدرس زیر در دسترسه و میتونید سرچ کنید:
http://localhost:8080/std
نکته: یا اسم پکیج مورد نظر رو توی سرچ بزنید (مثلfmtیاnet/http) یا مستقیم آخر آدرس رو
/std
بذارید تا لیست stdlib رو ببینید.
💠 سبک تر کردن دانلود
اگر سورس Go رو روی سیستم دارید، مسیرش رو بدید تا نیازی به دانلود دوباره داک نباشه (که توی این وضعیت اذیت نکنه):
pkgsite -open -gorepo $(go env GOROOT)
🔘 @TerminalNotes <- #programming #golang
❤1
اگر با Rust هم کار میکنید و از طریق toolchain اون یعنی rustup نصبش کردید همه مستندات stdlib بدون هیچ کار اضافهای آفلاین آمادس:
🔘 @TerminalNotes <- #programming #rust
rustup doc
🔘 @TerminalNotes <- #programming #rust