תכנות גנרי

תכנות גנרי (באנגלית: Generic Programming, ועל פי האקדמיה ללשון העברית: תכנות סוגני), הוא סגנון פיתוח תוכנה בו אלגוריתמים נכתבים במונחים של טיפוסים שיוגדרו בהמשך, וסוג הטיפוס יוגדר על פי הצורך ואז יתבצע שימוש באלגוריתם עבור הטיפוס המסוים שנקבע. גישה זו, שהשפה שנקטה בה ראשונה הייתה ML בשנת 1973, הרשתה כתיבת פונקציות משותפות או טיפוסים השונים רק בקבוצת הטיפוסים עליהם הם משמשים, ועל ידי כך מופחתת כפילות בקוד.

ישויות תוכנה מסוג זה נקראות:
 Generics – Ada, Delphi, Eiffel, Java, C#, F#, Swift, Visual Basic .NET
 פולימורפיזם פרמטרי – ML, Scala, Haskell
 Templates – C++, D

תמיכה בתכנות גנרי

שפות מונחות עצמים 

כאשר יוצרים מחלקה בשפות תכנות בעלות טיפוסים סטטיים, לא נוח לכתוב מימוש עבור כל אחד מהטיפוסים המוכלים. דוגמה ב-++C למחלקה הנמנעת מהכפילות הזו על ידי הגדרת template:
template<typename T> 
class List 
{ 
 /* תוכן המחלקה */ 
};

/* דוגמה ליצירת רשימה גנרית המקבלת אתחול של הטיפוס */
List<Animal> list_of_animals;
List<Car> list_of_cars;

דוגמה למימוש מחסנית גנרית בשפת #C: 
public class Stack<T>
{
 T[] items; 

// שימוש פונקציונלי באותו משתנה גנרי שהתקבל בהגדרת המחלקה בזמן ריצה
 public void Push(T item)
 {...}
 public T Pop()
 {...}
}

// שימוש במחלקה הגנרית - הגדרת מחסנית ואתחול למשתנים מסוג מחרוזת
Stack<string> stack = new Stack<string>();

// שימוש בפונקציות הגנריות עם הסוג המתאים
stack.Push("John");
stack.Push("Doe");
string str = stack.Pop();

שפות פונקציונליות

שפות אחרות 
במשפחת שפות ML, ישנו פולימורפיזם פרמטרי, ומודלים גנריים הנקראים "functors". גם Standard ML וגם OCaml תומכים ב-functors, המתפקדים באופן דומה ל-"class templates" בחבילה הגנרית של Ada. אבסטרקציה סינטקטית ב-Scheme בעלת קשר לגנריות, אלו הם למעשה קבוצה מכילה של templating המצויה ב-++C.

מודול של ורילוג יכול לקבל פרמטר אחד או יותר, אליהם ערך אחד או יותר משויך באתחול המודול. דוגמה לכך היא מערך רגיסטר גנרי, כאשר גודל המערך ניתן כפרמטר. 

VHDL הנגזרת מ-Ada מכילה אף היא יכולות גנריות.

הערות שוליים 

תכנות
פרדיגמות תכנות