"ฟังก์ชั่นชั้นหนึ่ง" เป็นคำที่สามารถนำไปใช้ในการเขียนโปรแกรมคอมพิวเตอร์และวิทยาการคอมพิวเตอร์กับภาษาการเขียนโปรแกรมคอมพิวเตอร์หากการปฏิบัติหน้าที่ของมันเป็นไปตามชุดของแนวทางแม้ว่าขอบเขตและความลึกของแนวทางเหล่านี้จะไม่ตกลงอย่างเป็นทางการ . ในการมีภาษาโปรแกรมคอมพิวเตอร์ฟังก์ชั่นชั้นหนึ่งคุณสมบัติหลักที่ต้องรองรับคือความสามารถในการส่งผ่านฟังก์ชั่นเป็นอาร์กิวเมนต์ไปยังฟังก์ชั่นอื่น ๆ ฟังก์ชั่นจะต้องสามารถกำหนดให้กับตัวแปรเพื่อให้สามารถจัดเก็บได้ คุณสมบัติอื่น ๆ ที่ใช้ในการกำหนดสิ่งที่ถือเป็นฟังก์ชั่นชั้นหนึ่งรวมถึงความสามารถในการสร้างฟังก์ชั่นแบบไดนามิกที่รันไทม์และความสามารถของภาษาที่จะมีฟังก์ชั่นเป็นค่าตอบแทนของฟังก์ชั่นอื่น ภาษาที่รองรับสถาปัตยกรรมฟังก์ชั่นชั้นหนึ่งอนุญาตให้มีนามธรรมระดับสูงและในบางกรณีก็มีกลไกสำหรับการสร้างรหัสแบบไดนามิกในเวลาทำงาน
เมื่อคำว่า "ฟังก์ชั่น" ถูกนำมาใช้ในความหมายที่กำหนดอย่างอิสระแนวคิดของการส่งผ่านฟังก์ชันภายในโปรแกรมผ่านตัวแปรไม่จำเป็นต้องมีลักษณะเฉพาะกับภาษาที่ใช้การสนับสนุนฟังก์ชั่นชั้นหนึ่ง ความสามารถในการส่งบล็อคของรหัสไปยังฟังก์ชันหรือเพื่อส่งคืนรหัสที่ไม่ใช่ไดนามิกจากฟังก์ชันสามารถทำได้อย่างง่ายดายในภาษาการเขียนโปรแกรมจำนวนมากผ่านกลไกที่แตกต่างกัน หนึ่งในส่วนที่เข้มงวดของคำจำกัดความของภาษาฟังก์ชั่นชั้นหนึ่งคือการจัดการของฟังก์ชั่นเป็นตัวแปรจะต้องทำโดยกำเนิดโดยไม่ต้องใช้ข้อมูลเมตาเช่นการกำหนดเงื่อนไขและไม่เรียกคอมไพเลอร์เพื่อคอมไพล์ รหัส. คำว่า "ฟังก์ชั่น" ยังใช้เพื่ออ้างถึงบล็อกโค้ดอิสระที่ถูกเรียกด้วยตัวเองซึ่งหมายความว่าพวกเขาจะไม่รวมบล็อคโค้ดที่รู้จักกันในชื่อเมธอดในภาษาโปรแกรมเชิงวัตถุหรือบางครั้งเรียกว่าโพรซีเดอร์ในภาษาอื่น
เมื่อภาษาได้รับการออกแบบมาเพื่ออนุญาตให้ใช้รหัสฟังก์ชั่นชั้นหนึ่งรูปแบบการออกแบบบางอย่างสามารถนำไปใช้ได้โดยตรงมากกว่าในภาษาอื่น ๆ ฟังก์ชั่นสามารถรับฟังก์ชั่นเป็นตัวแปรจากนั้นสร้างฟังก์ชั่นใหม่และส่งกลับฟังก์ชันใหม่ไปยังรหัสการโทรดังนั้นสิ่งนี้จะสร้างกลไกสำหรับการสร้างรันไทม์ของรหัสโปรแกรม นอกจากนี้ยังสามารถใช้ฟังก์ชั่นที่ป้อนโดยผู้ใช้แบบเรียลไทม์ที่เป็นไปได้ภายในภาษาโดยไม่ต้องใช้กระบวนการเช่นการสะท้อนกลับหรือการประเมินผล
การใช้งานพื้นฐานที่สุดสำหรับสถาปัตยกรรมฟังก์ชั่นชั้นหนึ่งรวมถึงการสร้างฟังก์ชั่นทั่วไปที่สามารถนำกลับมาใช้ใหม่ได้ง่ายและใช้อัลกอริทึมทางคณิตศาสตร์แบบเรียกซ้ำที่สามารถแก้ไขสมการของตัวเองได้ การใช้ขั้นสูงที่คล้ายกันสำหรับกลไกชั้นหนึ่งคือการใช้งาน polymorphism ในภาษาที่ไม่ได้นำไปใช้โดยเฉพาะ สิ่งนี้สามารถอนุญาตให้ฟังก์ชันถูกเรียกด้วยฟังก์ชันลายเซ็นเดียวกัน แต่รันโค้ดตามบริบทที่ถูกเรียกบางครั้งโดยผ่านฟังก์ชันคีย์ไปยังฟังก์ชัน polymorphic


