אייפל (שפת תכנות)

דוגמה ל-Design by contract class DATE

create
   make feature {NONE} 
   -- Initialization
   make (a_day: INTEGER; a_hour: INTEGER) -- Initialize `Current' with `a_day' and `a_hour'.
 
 require 
   valid_day: 1 <= a_day and a_day <= 31
   valid_hour: 0 <= a_hour and a_hour <= 23 
 do 
   day := a_day
   hour := a_hour
 
 ensure 
   day_set: day = a_day
   hour_set: hour = a_hour
 
 end
 
feature -- Access 
   day: INTEGER -- Day of month for `Current'
   hour: INTEGER -- Hour of day for `Current'
 
 feature -- Element change 
   set_day (a_day: INTEGER) -- Set `day' to `a_day'
 
require
   valid_argument: 1 <= a_day and a_day <= 31
 do
   day := a_day
 ensure
   day_set: day = a_day
 end
 
 invariant 
   valid_day: 1 <= day and day <= 31
   valid_hour: 0 <= hour and hour <= 23
  end

Uniform access principle

כיוון שיש שינויים ותוספות של אובייקטים חדשים לשפה, דאגו לעשות שכל הפניות יהיו באותה צורה כדי לחסוך תקלות. ולכן יש מנגנון גישה זהה לכל הפונקציות והמחלקות.
לדוגמה:
(Foo.bar (5
יכול לשמש בתור פונקציה שמקבלת את הערך 5 ויכול גם לשמש בתור מחלקה שהמשתנה שלה יקבל את הערך 5.

Command Quiery seperetion

הפרדה מוחלטת בין פונקציה שמחזירה ערך, כלומר בקשת מידע ואשר אינה יכולה בשום אופן לעדכן מידע, לבין פרוצדורה המעדכנת או מבצעת פעולה, אך אינה מחזירה מידע. וזאת על מנת לא ליצור Side effects שלא שהמתכנת לא התכוון אליהם.

תאימות לשפות אחרות

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

משתנים פשוטים

נקראים גם EXPANDED
הגדרת משתנים נעשית בדרך דומה לשפת פסקל: שם המשתנה נכתב מצד שמאל לאחריו נקודתיים ושם הטיפוס.
flag: BOOLEANi: INTEGERs: STRINGr: REALd: DOUBLEc: CHARACTER

אובייקטים

נקראים גם REFERENCE ומכילים אובייקטים או מערכים. לדוגמה:
i: MYoBJ

מערכים - ARRAY

הצהרה:
keywords : ARRAY[STRING]numbers: ARRAY[INTEGER]
יצירה (מערך מ-1 עד 100):
create keywords.make(1,100)

רשומה

נקרא tuples מקבילה של struct או class ללא פונקציות רק data members:
t: TUPLE [name: STRING; weight: REAL; date: DATE]
 יכול להוות תאריך או רשומה מסוימת וא"צ להגדיר מחלקה 
["Brigitte", 3.5, Last_night]

גישה: 
t.weight := t.weight + 0.5

IF

if תנאי
then גוף
else אם לא מתקיים התנאי
end סוף תנאי
if(num>10)  then

  output.putint (num)

  output.new_lineelse

  output.putstring ("Error")end

LOOP

from תנאי התחלה
until תנאי עצירה
loop/end גוף הלולאה
from I:=0  until I>10 loop

  RESULT := RESULT + 1end

מנגנון ניהול חריגות

לשפה יש מנגנון מאוד יעיל של ניהול חריגות שעובד בצורה כזאת שהוא משתמש בבדיקת ה-Post condition שלו, ובמקרה שזה לא עובר, הוא עושה את הפונקציה מחדש בשביל לנסות שוב לפי מספר הניסיונות שהוגדרו לו מראש.
לדוגמה:
 connect_to_server (server: SOCKET) -- Connect to a server or give up after 10 attempts. 
 require 
    None_Null: server /= Void and then server.address /= Void 
 local 
   attempts: INTEGER 
 do 
   server.connect 
 ensure 
   connected: server.is_connected 
 rescue 
   if attempts < 10 then 
      attempts := attempts + 1 
 retry 
   end 
 end

אפשרויות שונות בשפה

קריאות חד פעמיות - משמש לאיפוס ערכים באובייקטים ועובד בצורה קלה ונוחה. 
מנגנון ניהול חריגות - לשפה יש מנגנון מאוד יעיל של ניהול חריגות שעובד בצורה כזאת שהוא משתמש בבדיקת ה-Post condition שלו, ובמקרה שזה לא עובר, הוא עושה את הפונקציה מחדש בשביל לנסות שוב לפי מספר הניסיונות שהוגדרו לו מראש.
השפה משלבת שתי גישות לתרגום – יש לה גם מפרש, וגם מהדר.
קוד שלא נעשה בו שינוי מאז הפעם האחרונה, כולל ספריות מערכת, הוא קוד שעבר הידור – ולכן הוא "קפוא".
קוד ששונה "הותך", ועל ההרצה שלו מופקד המפרש של השפה.
היתרון של הטכנולוגיה, הוא שהיא נותנת לנו ליהנות מכל העולמות - מהירות הריצה שמספק קוד שכבר תורגם במלואו לשפת מכונה על ידי המהדר, ומהירות תגובה לשינויים בעזרת קוד מפורש.

תרגום לשפת מכונה

באייפל יש שני שלבי תרגום: 
החלק הראשון הוא הידור לקוד ביניים בעזרת מהדר, עליו רץ מפרש. 
אחר כך, הקוד מתורגם לשפת C, ובעזרת מהדר C הוא מהודר לשפת מכונה.
לפי מתכנני השפה, מטרת התרגום לשפת C כשפת ביניים, הוא ניצול שיטות הייעול הקיימות במהדרי שפת C. (לטענת מעצבי השפה, קוד בשפת Eiffel יכול להיות יעיל כאילו נכתב בשפת C עצמה או Fortran).

חווית המשתמש

התוכנה מתאימה לכותבים שצריכים לתאם ביניהם ממשקים, או שהשימוש בקוד לא ידוע מראש (ירושה מבוקרת).
ה-Writeabilty (הכתיבות) סביר, דרוש מעט זמן להתרגל לשפה, וכן יש תיעוד רב על השפה. היתרון הוא שהוא מפורט והחיסרון שהוא כמעט היחיד (ראו למטה בקישורים).

פלטפורמות

אייפל רצה על הפלטפורמות הבאות: Windows,‏ Linux,‏ Unix,‏ VMS.