" esac
" Chấm dứt "" trước đó case
để tạo thành một " khối mã ".
Trong Algol68, chúng được sử dụng, nói chung, chuỗi ký tự đảo ngược của từ khóa giới thiệu được sử dụng để chấm dứt bao vây, ví dụ: ( if ~ then ~ else ~ fi, case ~ in ~ out ~ esac, for ~ while ~ do ~ od ).
Tôi sẽ gọi chúng là "Khối bảo vệ" sau Edsger Dijkstra và Ngôn ngữ chỉ huy được bảo vệ của anh ta .
od
có lẽ đã không được sử dụng trong Bourne Shell vì sự tồn tại của lệnh "od" Unix .
Lịch sử:
Ý tưởng "Khối bảo vệ" dường như xuất phát từ ALGOL 68, ví dụ tiếng Anh:
proc days in month = (int year, month)int:
case month in
31,
if year mod 4=0 ∧ year mod 100≠0 ∨ year mod 400=0 then 29 else 28 fi,
31, 30, 31, 30, 31, 31, 30, 31, 30, 31
esac;
Việc thực hiện Algol68 LGU của Liên Xô cũng làm như vậy: Trong tiếng Anh, tuyên bố về trường hợp tôn kính của tiếng Anh Algol68 case ~ in ~ out ~ esac
, trong Cyrillic, điều này đọc выб ~ в ~ либо ~ быв
.
Sau đó, vào năm 1975, các khối mã của Algol68 đã được Edsger Dijkstra mượn cho Ngôn ngữ chỉ huy được bảo vệ của ông . ví dụ
if a ≥ b → max := a
| b ≥ a → max := b
fi
Có lẽ Dijstra sử dụng "gác Blocks" để vượt qua những khác Dangling nhập nhằng thực hiện trong Algol60 và sau đó tái chế trong các ngôn ngữ lập trình C . (xem xung đột giảm ca. )
Cuối cùng - từ Algol68 - " esac
" đã biến nó thành vỏ Bourne năm 1977 (nơi bạn phát hiện ra esac
) nhờ sự giúp đỡ của Stephen R. Bourne , người đã phát triển một trình biên dịch Algol68 đầu tiên có tên ALGOL 68C .
Nổi tiếng Stephen cũng đã sử dụng các Khối bảo vệ tương tự này trong "tệp tiêu đề C" có tên macro.h
#define IF if(
#define THEN ){
#define ELSE } else {
#define ELIF } else if (
#define FI ;}
Các thiên tài phần mềm đáng chú ý Landon Curt Noll và Larry Bassel tình cờ tìm thấy mã macro.h của Steve vào năm 1984 trong khi làm việc tại nhóm chuyển đổi Genix của National S bán dẫn và đấu tranh để hiểu ứng dụng của nó. Và thế là Landon & Larry sau đó đã tạo ra Cuộc thi mã C bị xáo trộn quốc tế ...
Từ năm 1984 cho đến ngày nay, đã có hàng ngàn ngôn ngữ lập trình "tốt hơn" khác không sử dụng Lệnh bảo vệ của Dijkstra. Và việc sử dụng chúng của Steven Bourne macro.h
hiện nay thường được trích dẫn trong "Luận án phát triển phần mềm" của sinh viên đại học CNTT là bằng chứng cho thấy họ không ngủ trong các bài giảng. :-)
esac
các điểm chính xác nơi cần đến - đến dòng xác định nó và minh họa rằng nó bắt buộc.