ประเภทที่น่าสนใจหรือไม่เหมือนใครในภาษาการเขียนโปรแกรม? [ปิด]


20

เรามีจำนวนเต็มจำนวนจุดลอยตัวสตริงและชนิดทศนิยมที่เห็นเป็นครั้งคราวทั้งหมด ประเภทที่แปลกประหลาดหรือมีประโยชน์ที่สุดที่คุณพบมีประโยชน์หรือไม่?


สวัสดี user10008 ยินดีต้อนรับสู่โปรแกรมเมอร์! คุณได้ตรวจสอบคำถามที่พบบ่อยของเราหรือไม่? ซึ่งในแนวทางอัตนัยหกคุณไม่คิดว่าคำถามของคุณตรง?

4
ใครอยากเขียนข้อความสำหรับเสียงกระเพื่อม?
ทำเครื่องหมาย C

ฉันคิดว่ามันอาจจะเป็น dupe แต่เพียงเพราะคำตอบของฉันจะเป็น dupe ดังนั้นฉันจะโพสต์ลิงก์และบางทีคุณอาจพบคำตอบที่ดี: programmers.stackexchange.com/questions/724/ …
Peter ช่างกลึง

@ Mark: ฉันพยายาม แต่ประเภทอาจเป็นหนึ่งในสิ่งที่น่าสนใจที่สุดเกี่ยวกับ Lisp
Larry Coleman

@ LarryC ฉันคิดว่านี่เป็นคำถามที่สมบูรณ์แบบสำหรับเสียงกระเพื่อมเนื่องจากการใช้งานที่แพร่หลายของรายการ ! รายการสร้างแผนผังต้นไม้และสิ่งนี้ช่วยให้คุณสามารถเขียนฟังก์ชั่นที่ทำสิ่งที่น่าอัศจรรย์ในรหัสของคุณฉันรวบรวม ฉันกำลังเรียนแร็กเก็ต (ก่อนหน้านี้PLT Scheme ) ตอนนี้ Lisp เป็นภาษาโปรแกรมเดียวที่ฉันได้รับแรงบันดาลใจและสนใจเรียนรู้อย่างแท้จริง
ทำเครื่องหมาย C

คำตอบ:


18

ฉันจะสั้น:

Maybe a

ใน Haskell

ด้วยโครงสร้างที่เรียบง่ายนี้ภาษาจะช่วยแก้ปัญหาการขัดข้องหรือNullPointerExceptionอย่างเลี่ยงไม่ได้ที่ "One Million Mistake" ของ Tony Hoare :)

ตรงไปตรงมาการมีตัวเลือกตรวจสอบเวลารวบรวม? มันเหมือนฝัน ...


1
หรือตัวเลือกตามที่เรียกในภาษาการเขียนโปรแกรมอื่น ๆ
Jonas

@ Jonas: ฉันต้องยอมรับว่าฉันไม่ชอบOptionชื่อ ทำไมไม่Optional! อาจเป็นเพราะฉันไม่ใช่เจ้าของภาษา แต่Optionไม่ได้สื่อความหมายถึง "ทางเลือก" ให้ฉัน
Matthieu M.

Maybeชื่อน่ารัก: "คุณมีอะไร?" "อาจเป็น Int" อย่างไรก็ตามสิ่งที่ประณีตมาก ๆ ก็คือมันเป็นทั้งนักแสดงและโมนาดที่พูดง่าย ๆ หมายความว่าคุณจะได้รับการปลดปล่อยว่างเปล่า คุณไม่จำเป็นต้องใส่เช็คว่างในฟังก์ชั่นหรือกลางรหัสของคุณ คุณเพียงแค่ต้องตรวจสอบที่ส่วนท้ายสุดของรหัสของคุณถ้าทั้งหมด
Tikhon Jelvis


15

void *ฉันรักเสมอ มันอาจเป็นอาการของบางสิ่งบางอย่างในตัวฉัน


2
ใช่. ฉันกลัวว่ามันคืออะไร :) โอ้ +1 สำหรับ "น่าสนใจ" มากกว่า "ไม่เหมือนใคร" Objective-C เห็นได้ชัดvoid *และปาสกาล / Delphi Pointerมี
Frank Shearar

ฮ่าฮ่าของประเภทที่ไม่ใช่ แต่คุณไม่สามารถยืนยันว่ามันไม่ได้มีประสิทธิภาพ
user10008

15
ฉันแค่รักการมองโลกในแง่ร้ายโดยธรรมชาติที่แสดงออก: 'คุณเห็นสิ่งนั้นอยู่ที่นั่นหรือ 'ใช่มันคืออะไร', 'ไม่มีความคิด'
biziclop

ฉันมักจะคิดว่ามันตลกที่คุณไม่สามารถประกาศเป็นโมฆะ แต่คุณสามารถใช้ที่อยู่ของมัน ดูเหมือนว่าฉันกับ struct s {int A; โมฆะ B; int C; } ว่าที่อยู่ของ B ควรเป็นที่อยู่ของรอยแตกระหว่าง A และ C แต่ไม่อนุญาต
Andy Canfield

นั่นเป็นสาเหตุที่ใช้ "พอยน์เตอร์" ปาสกาลเพื่อแสดงพอยน์เตอร์ทั่วไปและไม่สับสนกับ "โพรซีเดอร์"
umlcat

14

ลัวะมีโต๊ะในตัวที่น่าประทับใจที่สุด มันมี hashtable ในตัวและเวกเตอร์และด้วยการใช้metatablesสามารถเป็นฐานพื้นฐานสำหรับการเขียนโปรแกรมเชิงวัตถุในภาษาขั้นตอน

แต่ละดัชนีของตารางสามารถรับโครงสร้างภาษาพื้นฐานใด ๆ (ตัวเลข, บูลีน, สตริง, ฟังก์ชัน -yes, ฟังก์ชั่นเป็นประเภทบน lua - และตาราง)


สังเกตว่า Javascript นั้นถูกสร้างขึ้นในลักษณะที่คล้ายกันมากและ Python นั้นถูกสร้างขึ้นบนพื้นฐานที่เหมือนกันมาก ๆ ซึ่งอาจเป็น Ruby
9000

ฉันคิดว่ามันเป็นไปได้ใน Perl และ PHP ด้วยใช่ไหม
FrustratedWithFormsDesigner

มีความแตกต่างระหว่างตารางใน lua และ hash container ในภาษาอื่น ๆ มีความแตกต่างเล็กน้อยในการนำวิธีการ lua กระจายค่าแฮชที่ทำให้ตารางทำงานในรูปแบบที่เกือบจะมีเวทย์มนตร์ ฉันส่วนใหญ่เขียนโปรแกรมเป็นไพ ธ อนและบางครั้งพบว่าฉันใช้สมมติฐานที่ไม่ได้ถือตามความคาดหวังของฉันเกี่ยวกับวิธีการทำงานของตารางใน lua ตัวอย่างที่เฉพาะเจาะจงของเวทย์มนตร์นี้คือจำนวนเต็มแฮชกับตัวเอง + 1 ซึ่งหมายความว่าคีย์จำนวนเต็มบรรจุหนาแน่นและ +0.0 และ -0.0 มีแฮชเดียวกัน (เท่ากัน)
SingleNegationElimination

9

ฉันประหลาดใจที่ไม่มีใครพูดถึง Monads หรือ Algebraic Datatypes เลย


อาจจะแสดงให้เราเห็นตัวอย่าง :)
Nawfal

8

ชัดมีสองประเภทที่น่าสนใจ: และt nilสิ่งที่น่าสนใจเกี่ยวกับพวกเขาคือทุกอย่างเป็นและไม่มีอะไรที่เป็นtnil


คุณจริงจังไหม ผมไม่ทราบว่า.
ทำเครื่องหมาย C

คือ? nilt
Jon Harrop


6

Fortran มีบล็อคทั่วไป เป็นหนึ่งในประเภทข้อมูลที่พบได้น้อยที่สุดในภาษาสมัยใหม่หรือเป็นวิธีที่ผิดปกติในการแบ่งปันข้อมูลได้อย่างมีประสิทธิภาพ

Fortran 95 มีประเภทของช่วงเวลาและ arithmetics ช่วงเวลาในตัว

รายการจะไม่สมบูรณ์หากไม่มีประเภท monadic ที่พบใน Haskell เพื่อให้เข้าใจพวกเขาคุณต้องใช้ความพยายาม


Ah, UniData / UniVerse DBs นั้นมีบล็อคทั่วไปในภาษาภายใน (UniBasic) ด้วย
Dan McGrath

บล็อกทั่วไปเป็นบล็อกของรหัสที่ใช้โดยส่วนต่าง ๆ ของโปรแกรมหรือไม่
Mark C

1
@MarkC IIRC เป็นข้อมูลทั่วโลกโดยทั่วไป แต่แต่ละฟังก์ชั่นที่เข้าถึงต้องบอกอย่างชัดเจนว่าเป็นไปได้ที่อันดับสูงสุด
jk

5

Delphi ได้ตั้งค่า ( ดูเพิ่มเติม ) ซึ่งฉันไม่เชื่อว่าจะดำเนินการในลักษณะเดียวกันในภาษาอื่น ๆ

สิ่งนี้ทำให้การจัดเก็บแอตทริบิวต์หลายตัวแปรในฐานข้อมูลเป็นเรื่องง่าย: D


4

ฉันคิดว่ามันจริงๆเพียงแปลกมาจากการเขียนโปรแกรมบนสถาปัตยกรรมคลาสสิก แต่แน่นอนหนึ่งในประเภทที่ยากที่สุดสำหรับผมที่จะตัดหัวของฉันรอบที่เป็นครั้งแรกที่ลงทะเบียนควอนตัมซึ่งแสดงให้เห็นว่าในQCL


3

PL / SQL ช่วยให้คุณประกาศตัวแปรประเภทmy_table.some_column%type... ฉันพบว่ามีประโยชน์มาก

และ C # ช่วยให้คุณประกาศวัตถุเป็นโมฆะหรือไม่แม้ว่าฉันไม่แน่ใจว่านับเป็นประเภท


4
แต่cursor%rowtypeมันก็สนุกกว่า: มันเป็นรูปแบบบันทึกที่สร้างขึ้นแบบไดนามิกซึ่งสะท้อนถึงคอลัมน์ที่แบบสอบถามของเคอร์เซอร์ส่งกลับ
9000

.NET "Nullable" เป็นจริง (ทั่วไป) ประเภทในตัวเอง
Konamiman

3

ฉันมีจุดอ่อนอยู่ในใจสำหรับประเภทข้อมูลของEuphoriaเมื่อฉันยังเด็ก

มันมีโครงสร้างดังนี้:

Object
-> Atom
-> Sequence
  • Atom = ค่าตัวเลขเดียว
  • Sequence = ลำดับของวัตถุ

    -- examples of atoms:
    
    0
    98.6
    -1e6
    
    -- examples of sequences:
    
    {2, 3, 5, 7, 11, 13, 17, 19}
    {1, 2, {3, 3, 3}, 4, {5, {6}}}
    {{"jon", "smith"}, 52389, 97.25}
    {}                        -- the 0-element sequence
    

    ดู: คู่มืออ้างอิง

หมายเหตุ: "jon" เป็นวิธีสั้น ๆ ในการเขียนลำดับของค่า ASCII ตัวอย่างเช่น"ABCDEFG"เดียวกับ{65, 66, 67, 68, 69, 70, 71}


7
รู้สึกเหมือน LISP ...
FrustratedWithFormsDesigner

ชนิดข้อมูลจริงเป็นบิตเท่านั้น
Dan McGrath

1
@FrustratedWithForms เหมือนกันฉันคิดว่า "เฮ้เขาพูดว่า 'Atom' นี่มันดูเหมือน (a) Lisp แต่มีตัวแบ่งที่ไม่จำเป็น: P
Mark C

3

เฟลิกซ์มีประเภทผลรวมที่ไม่ระบุชื่อ ประเภทเขียนเช่น:

typedef il = int + long;

ในทางทฤษฎี ค่านั้นน่าเกลียด:

case 0 of il (1)
case 1 of il (2L)

ยกเว้นบางทีสำหรับผลรวมหน่วยเช่น 3 = 1 + 1 + 1

case 0 of 3
case 1 of 3 

ซึ่งโชคไม่ดีที่ใช้การนับต้นกำเนิดเป็นศูนย์สำหรับ "ความเข้ากันได้ของ C" จำนวนนิรนามที่จำเป็นสำหรับประเภทพีชคณิตที่พิมพ์ด้วยโครงสร้างเช่น:

(1 + T * li) as li

เป็นรายการ (ลิงก์ที่เชื่อมโยงโดยลำพัง) ของ T ทุกภาษาอื่น ๆ ที่ฉันรู้ว่าต้องใช้จำนวนเงินที่พิมพ์ในนามซึ่งทั้งชนิดของตัวเองและตัวสร้างจะต้องได้รับชื่อ

ชวเลข 3 ที่ใช้ด้านบนน่ารักต่อไปนี้อยู่ในห้องสมุด:

typedef void = 0;
typedef unit = 1;
typedef bool = 2;

และสัญลักษณ์นี้:

 T ^ 3

คืออาร์เรย์ของความยาวคงที่ 3 .. 3 ไม่ใช่จำนวนเต็ม แต่รวมเป็น 3 หน่วย น่าเสียดาย + ไม่ได้เชื่อมโยงกัน :)


2

q / kdb +มีตารางในตัว เนื่องจากเป็นภาษาโปรแกรมและฐานข้อมูลแบบคอลัมน์ดังนั้นจึงไม่จำเป็นต้องใช้ LINQ หรือ ORM

ตัวอย่างเช่นสามารถสร้างตารางเช่นนี้ (การมอบหมายถูกบิดเบือนโดย:แทนที่จะ=เป็นในภาษาส่วนใหญ่):

people:([]name:`Joe`Amy`Sarah; age:17 15 18; GPA:3.5 3.8 3.33)

ตอนนี้ฉันสามารถดูตารางของฉัน:

q)show people
name  age GPA 
--------------
Joe   17  3.5 
Amy   15  3.8 
Sarah 18  3.33

และฉันสามารถค้นหาได้:

q)select from people where GPA>3.4
name age GPA
------------
Joe  17  3.5
Amy  15  3.8

2

ฉันพบว่าสหภาพใน C ++ เป็น 'แปลก' เมื่อฉันได้ยินเกี่ยวกับพวกเขาครั้งแรก ฉันยังไม่ได้ตีฉากที่พวกเขาเป็นตัวเลือกที่ชัดเจนในการใช้งาน


3
สหภาพมาจากซีตัวอย่างที่ดีหนึ่งคือโครงสร้างของ zval ใน php
Martin Wickman

2
ฉันใช้มันในอีมูเลเตอร์ Z80 เพื่อเข้าถึงการลงทะเบียน 16 บิตในฐานะรีจิสเตอร์ทั้งหมด (HL, BC) และรีจิสเตอร์ 8 บิต (H, L, B และ C) สิ่งนี้สะท้อนให้เห็นถึงวิธีการใช้งานใน Z80 asm นอกจากนี้ใน "สายพันธุ์" ชั้นเรียนที่สามารถเก็บค่าที่แตกต่างกัน (เช่น int / float) - ไม่แน่ใจว่าทำไมผมไม่ได้ใช้ subclasses แต่มันทำให้ความรู้สึกในเวลานั้น :)
ggambett

@ggambett: ฉันทำแบบเดียวกันกับโปรแกรม Z80 แล้ว! มีเพียงฉันเท่านั้นที่เพิ่ม bitfield เพื่อเข้าถึงแต่ละค่าสถานะในการลงทะเบียน F
Konamiman

2

ฉันยังคงพยายามที่จะสรุปสิ่งที่ฟังก์ชั่นหลายพารามิเตอร์กลายเป็น F # และภาษาที่ใช้งานได้อื่น ๆ โดยทั่วไป f (Foo, Bar) กลายเป็น func f (Foo)

นั่นคือฟังก์ชั่นพารามิเตอร์สองตัวที่รับ Foo และ Bar และคืนค่า int เป็นฟังก์ชั่นพารามิเตอร์หนึ่งตัวที่รับ Foo และส่งกลับฟังก์ชั่นพารามิเตอร์หนึ่งที่ใช้บาร์และคืนค่า int แต่อย่างใดคุณสามารถเรียกมันด้วยสองพารามิเตอร์ถ้าคุณต้องการ ฉันเขียนโพสต์เกี่ยวกับที่นี่


8
แต่ฟังก์ชั่นf(Foo, Bar)จะเหมือนกับฟังก์ชั่นf(Foo)ที่คืนค่าฟังก์ชั่นอื่นf'(Bar)ซึ่งคืนค่าที่f(Foo, Bar)จะคืน นั่นคือถ้าคุณแก้ไขอาร์กิวเมนต์ 'Foo' แต่ไม่ใช่ 'Bar' คุณจะมีฟังก์ชันที่ไม่ได้ขึ้นอยู่กับ 'Foo' แต่ยังขึ้นอยู่กับอาร์กิวเมนต์ 'Bar' นี่เป็นเรื่องปกติสำหรับภาษาที่ใช้งานได้ มันเรียกว่า 'แกง'
9000

2

นิพจน์ปกติ:

พวกมันเป็นวัตถุที่ทรงพลัง แต่กระทัดรัด
ภาษาที่พวกเขาสร้างขึ้นมีความสามารถในการจัดการข้อความได้ดีเยี่ยม


2
มันเป็นไปได้ทั้งหมดที่จะแยกไวยากรณ์ง่าย ๆ ด้วย regexes ตัวอย่างเช่นมันค่อนข้างง่ายที่จะแยกวิเคราะห์ไฟล์ ini ด้วยตรรกะขั้นต่ำด้านบนของชุดของ regexes ข้อผิดพลาดที่หลายคนทำคือพยายามแยกไวยากรณ์ที่ซับซ้อนมาก ๆ (เช่น. XML / HTML)
Matthew Scharley


@ Mark C: ด้านบนคือคำตอบคือ (โดยมีการทำลายสถิติ 4320 โหวตขึ้นไป) คุณไม่สามารถทำได้
Martin York

ใช่นั่นเป็นเรื่องตลก มันเป็นเรื่องที่น่ายินดีเมื่อฉันอ่านความคิดเห็นของมัทธิว
ทำเครื่องหมาย C

2

ภาษาหนึ่งภาษาในตระกูลที่ใช้งานได้มีคลาสที่เรียกว่า Unity คุณลักษณะที่แตกต่างของประเภท Unity คือไม่มีข้อมูล แต่เป็นประเภทบิตบิต ประเภทความสามัคคี (ในบางรูปแบบ) เป็นเพียงค่าเดียวหรือ (ในส่วนใหญ่) มีเพียงค่าเดียวเท่านั้น (ซึ่งไม่ใช่ประเภทเอง)

สิ่งเหล่านี้มีประโยชน์เนื่องจากเป็นประเภทที่แตกต่าง เนื่องจากคุณไม่สามารถแปลงจากประเภทเอกภาพหนึ่งไปเป็นอีกประเภทหนึ่งได้โดยปริยายคุณสามารถวางการตรวจสอบประเภทแบบสแตติกให้ทำงานได้อย่างมีประสิทธิภาพและรวดเร็ว

ความสามัคคียังเป็นวิธีที่ภาษาส่วนใหญ่อธิบาย Enums ด้วยการอนุญาตให้ชนิดใหม่เป็นชุดใด ๆ ที่กำหนดประเภทอื่น ๆ หรือเพื่ออธิบายประเภทบางทีค่าที่อาจเป็นค่าของประเภททั่วไป (พูดจำนวนเต็ม) หรือมีค่าที่แสดงถึงไม่มีค่า

บางภาษาที่ไม่ได้ใช้ประเภทของความสามัคคีที่ผู้ใช้กำหนดยังคงมีความเป็นเอกภาพในบางรูปแบบหรืออย่างอื่น ยกตัวอย่างเช่นงูหลามมีอย่างน้อยสามประเภทความสามัคคีNoneType, และNotImplementedType EllipsisTypeเป็นที่น่าสนใจว่าสองคนแรกทั้งสองหมายถึงบางสิ่งบางอย่างเช่น "ไม่มีค่า" แต่ที่สองใช้ในค่าที่ซับซ้อน (โดยเฉพาะการแสดงออกชิ้น) เพื่อเป็นตัวแทนกรณีพิเศษที่น่าสนใจ

ตัวอย่างที่น่าสนใจอื่น ๆ ของความสามัคคีรวมNULLอยู่ใน sql และundefinedใน javascript แต่ไม่ใช่voidใน C หรือ C ++ voidล้มเหลว แม้ว่ามันจะอธิบายคุณค่าของการไม่มีข้อมูล voidแต่ไม่คุ้มค่าที่เกิดขึ้นจริงสามารถเป็นชนิด


ฉันคิดว่าคุณหมายถึง "ประเภทหน่วย"
Jason Baker

2

symbolประเภทของรูบี้นั้นผิดปกติเล็กน้อย มันเป็นสตริงที่ใช้รูปแบบซิงเกิล หรือบางสิ่งบางอย่าง. จนถึงตอนนี้ฉันพบว่าการใช้สัญลักษณ์ที่ดีที่สุดอยู่ในสถานะการติดตามและการส่งผ่านชื่อฟังก์ชัน


ยังใช้เป็นปุ่มในแผนที่สำหรับการเปรียบเทียบคีย์ O (1)
Jeremy Heiler

มันไม่แปลกจริงๆเลย ทับทิมสืบทอดมาจาก Smalltalk ซึ่งสืบทอดมาจาก Lisp สกาล่าก็มีเช่นกันฉันคิดว่า ในความเป็นจริงเกือบทุกภาษาการดำเนินงาน (คอมไพเลอร์หรือล่าม) มีตารางสัญลักษณ์ภายในชัด Smalltalk และทับทิมเพียงเปิดเผยให้โปรแกรมเมอร์
Jörg W Mittag

1

ภาษาโคบอล โดยพื้นฐานแล้วมีเพียงสองประเภทข้อมูลพื้นฐานสตริงและตัวเลข แต่คุณต้องระบุอย่างชัดเจนว่าพวกมันถูกวางในหน่วยความจำPIC S9(5)V99 COMP-3อย่างไร


ฉันสามารถเอาชนะได้ BCPL มีหนึ่งประเภทข้อมูล - คำ; ดูen.wikipedia.org/wiki/BCPL
Stephen C

ตัวเลขมีหลายประเภท (COMP, COMP-1, COMP-2, COMP-3)
David Thornley

นั่นฟังดูน่ากลัว คุณช่วยอธิบายรายละเอียดเหล่านั้นได้อย่างไร?
ทำเครื่องหมาย C

S= เซ็นชื่อ, 9(5)= 5 หลัก, V= จุดทศนิยมโดยนัย99= อีก 2 หลักCOMP-3= BCD + เครื่องหมาย nybble
dan04

1

Clipper มี 'Code Blocks' ซึ่งคล้ายกับวิธีที่ไม่ระบุชื่อ พวกเขาสามารถส่งผ่านไปและประเมินตามความจำเป็นมักจะเป็นรูปแบบของการโทรกลับ คุณมักจะใช้มันสำหรับสิ่งต่าง ๆ เช่นทำการคำนวณแบบทันทีเมื่อแสดงตารางข้อมูล


0

VHDL มีประเภททางกายภาพ ตัวอักษรประเภทดังกล่าวรวมถึงทั้งค่าและหน่วย คุณสามารถกำหนดหน่วยย่อยได้เช่นกัน ตัวอย่างเช่นประเภททางกายภาพที่กำหนดไว้ล่วงหน้าคือtime:

type time is range <machine dependant> to <machine dependant> 
units
  fs;
  ps = 1000 fs;
  ns = 1000 ps;
  us = 1000 ns;
  Ms = 1000 us;
  sec = 1000 ms;
  min = 60 sec;
  hr = 60 min;
end units;

คุณสามารถกำหนดสิ่งต่าง ๆ ที่น่าสนใจได้


0

Clojure นั้นน่าสนใจเพราะมันมี meta-concept ของ "abstractions" ที่แพร่หลายภาษา ตัวอย่าง:

  • คอลเลกชัน
  • ลำดับ (ขี้เกียจและไม่ขี้เกียจ)
  • ฟังก์ชั่นการสั่งซื้อที่สูงขึ้น
  • Multimethods
  • โปรโตคอล
  • การอ้างอิงที่มีการจัดการ
  • แมโคร
  • คนอื่น ๆ .....

ในระดับหนึ่ง abstractions ใช้ " ความรับผิดชอบหลักการเดียว " ไปมาก มันขึ้นอยู่กับคุณที่จะแต่งมันเพื่อให้ได้ฟังก์ชั่นที่คุณต้องการ แต่คุณสามารถยืดหยุ่นได้อย่างมากเกี่ยวกับวิธีการรวมเข้าด้วยกัน

ตัวอย่างเช่นถ้าคุณต้องการระบบ OOP แบบคลาสที่มีการสืบทอดคุณสามารถสร้างหนึ่งในนามธรรมหลักเหล่านี้ได้อย่างรวดเร็ว

ในทางปฏิบัติ abstractions ของตัวเองได้รับการออกแบบในลักษณะที่การใช้งานที่เป็นไปได้หลายอย่างเช่นผ่านทางอินเตอร์เฟสที่เฉพาะเจาะจงเช่น clojure.lang.ISeq สำหรับลำดับหรือ clojure.lang.IFn สำหรับฟังก์ชันลำดับที่สูงขึ้น

มีวิดีโอที่น่าสนใจเกี่ยวกับหัวข้อนี้: The Art of Abstraction


0

หากคุณต้องการภาษาที่มีชนิดที่ไม่ซ้ำแล้วมุ่งหน้าBCPL ภาษานี้มีเพียงหนึ่งประเภทข้อมูลคำว่าเป็นจำนวนบิตคงที่สำหรับการใช้ภาษา


0

Googles Go มีประเภท "Channel" ซึ่งค่อนข้างแปลก


1
ช่องทางไม่ซ้ำกัน มีหลายภาษา เฟลิกซ์มีพวกเขา 10 ปีก่อนที่จะมีกูเกิลอยู่ :) โอแคลมีพวกเขาเมื่อ 10 ปีก่อนที่เฟลิกซ์จะมีอยู่
Yttrill

และมีภาษาอื่นอย่างน้อยหนึ่งภาษาที่มีช่องสัญญาณก่อน Ocaml อยู่ ยังเป็นหนึ่งในประเภทที่มีน้อยที่สุดในภาษาการเขียนโปรแกรม
Brainlag
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.