หลายปีก่อนฉันเรียน Applesoft Basic Strings ถูก suffixed เสมอกับและอาร์เรย์มีคำต่อท้ายของ$
%
นั่นเป็นวิธีการทำงานของภาษา คุณมองไปที่บางสิ่งคุณรู้ว่ามันคืออะไร ฉันไม่เคยเจาะลึกเข้าไปในล่ามเกินกว่าจะเข้าใจได้ว่าเหตุใดในกรณีนี้หรือการตัดสินใจออกแบบที่ทำให้เป็นเช่นนั้น
sigil ใน php มาจากอิทธิพลของ perl (ซึ่งได้รับอิทธิพลจากawk
และsh
) sigil ใน perl ค่อนข้างมากกว่าเพียงแค่$
มันสามารถระบุประเภทที่แตกต่างกัน:
$
เกลา
@
รายการ
%
กัญชา
&
codeblock
*
typeglob
sigil จะระบุส่วนของโครงสร้างตารางสัญลักษณ์ที่คุณกำลังดูอยู่ ด้านหลังของฉากรายการตารางสัญลักษณ์สำหรับ foo (เข้าถึงได้ผ่าน*foo
- typeglob) มีทุกอย่างที่อาจเป็น foo นอกจากนี้$foo
, @foo
, %foo
ที่รูปแบบ foo
, &foo
การ foo filehandle ฯลฯ ...
นอกจากนี้ยังอนุญาตให้สร้างนามแฝงของตัวแปรหนึ่งไปยังอีกตัวแปรหนึ่ง:
#!/usr/bin/perl
$foo = "foo";
@qux = (1,2);
*bar = \$foo;
*bar = \@qux;
print "$bar @bar\n";
พิมพ์นี้foo 1 2
- ใน Perl นี้เป็นสิ่งที่ sigils เป็นจริงๆสำหรับไม่ว่าคุณควรจะทำเช่นนี้ แต่ว่ามีเบื้องหลังสิ่งที่พวกเขาทำ
sigils มีไม่มากสำหรับการอ่าน แต่เพื่อให้สามารถมี$foo
และ@foo
ไม่มีการชนกันใน namespace (เปรียบเทียบภาษาอื่นที่ไม่มีทั้งสองอย่างint foo; int[] foo;
)
Sigils สำหรับการอ่านเป็นสิ่งที่เรียนรู้เป็นส่วนหนึ่งของภาษาใด ๆ - การอ่านไวยากรณ์ คุณสามารถบังคับประเภทของตัวเอง (ในฐานะสัญกรณ์ฮังการี) เพื่อเป็นส่วนหนึ่งของตัวระบุ
มีบางอย่างใน lex ตามเส้นของ:
typeChar [is]
capLetter [A-Z]
letter [a-z]
digit [0-9]
%%
{typeChar}{capLetter}(letter}|{digit})* { prientif("iddentifier");}
%%
จากนั้นคุณสามารถมีรหัสเช่น
iFoo = 42;
sFoo = "a string";
iBar = iFoo * 2;
ฉันไม่ได้บอกว่านี่เป็นความคิดที่ดี แต่ให้คนที่คุ้นเคยกับภาษานั้นสามารถอ่านภาษานี้ได้และคิดว่ามันช่วยเพิ่มความสามารถในการอ่านในขณะที่คนที่ไม่คุ้นเคยกับภาษาอาจคิดว่ามันเพิ่งเพิ่มเข้ามา เสียงดังรบกวนภาษา
อย่างไรก็ตามหลังจากทำงานกับภาษาที่กำหนดด้วยวิธีนี้ฉันอาจจะสามารถอ่านได้โดยไม่มีปัญหา
บางคนชอบพวกเขาบางคนทำไม่ได้ มีสงครามศักดิ์สิทธิ์อันยิ่งใหญ่ในฟอรัมต่าง ๆ ที่ถกเถียงกันเรื่องนี้และมันจะยิ่งทำให้คุณใช้มันมากแค่ไหน
หนึ่งสามารถออกแบบภาษาใหม่สำหรับผู้ที่ไม่ใช่โปรแกรมเมอร์ที่ใช้ sigils และทุกคนที่ไม่เคยตั้งโปรแกรมมาก่อนจะไม่บ่นสักนิดเกี่ยวกับพวกเขา ในอีกทางหนึ่งคุณไม่สามารถให้พวกเขาเป็นส่วนหนึ่งของภาษาแล้วมีโปรแกรมเมอร์ทับทิมหรือ perl บ่นว่าพวกเขาพลาดข้อมูลสำคัญบางอย่าง
มันไม่สำคัญหรอก สิ่งที่สำคัญคือว่า sigils จะเข้ากับภาษาได้อย่างไรถ้าคุณใช้พวกเขาหรือไม่ คุณต้องการที่จะทำ"123 $foo 456"
หรือคุณต้องทำ"123 " + foo + " 456"
? นี่คือที่ที่ควรทำการตัดสินใจ