แชร์ผ่าน


ค่า

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

รูปแบบ สัญพจน์
โมฆะ null
มีเหตุผล true    false
ตัวเลข 0    1    -1    1.5    2.3e-5
Time #time(09,15,00)
วันที่ #date(2013,02,26)
วันที่เวลา #datetime(2013,02,26, 09,15,00)
โซนวันที่เวลา #datetimezone(2013,02,26, 09,15,00, 09,00)
ระยะเวลา #duration(0,1,30,0)
Text "hello"
ไบ นารี #binary("AQID")
รายการ {1, 2, 3}
เรกคอร์ด [ A = 1, B = 2 ]
ตาราง #table({"X","Y"},{{0,1},{1,0}})
ฟังก์ชัน (x) => x + 1
ชนิด type { number }    type table [ A = any, B = text ]

ส่วนต่อไปนี้ครอบคลุมค่าแต่ละชนิดโดยละเอียด ชนิดและการให้คําอธิบายชนิดถูกกําหนดอย่างเป็นทางการในชนิด ค่าฟังก์ชันถูกกําหนดไว้ในฟังก์ชัน ส่วนต่อไปนี้แสดงรายการตัวดําเนินการที่กําหนดไว้สําหรับแต่ละชนิดค่า และให้ตัวอย่าง ข้อกําหนดแบบเต็มของความหมายของตัวดําเนินการจะตามมาใน ตัวดําเนินการ

Null

ค่า null ถูกใช้เพื่อแสดงถึงการขาดหายไปของค่าหรือค่าของสถานะที่แน่นอนหรือไม่ทราบ มีการเขียนค่า null โดยใช้สัญพจน์null ตัวดําเนินการต่อไปนี้ถูกกําหนดไว้สําหรับค่า null:

ตัวดำเนินการ ผลลัพธ์
x > y มากกว่า
x >= y มากกว่าหรือเท่ากับ
x < y น้อยกว่า
x <= y น้อยกว่าหรือเท่ากับ
x = y Equal
x <> y Not equal
x ?? y Coalesce

ชนิดเนทีฟของ null ค่าคือชนิด nullอินทรินซิก

ตรรกะ

มี การใช้ค่า ตรรกะสําหรับการดําเนินการบูลีนที่มีค่าเป็น true หรือ false มีการเขียนค่าตรรกะโดยใช้สัญพจน์ true และfalse ตัวดําเนินการต่อไปนี้ถูกกําหนดไว้สําหรับค่าตรรกะ:

ตัวดำเนินการ ผลลัพธ์
x > y มากกว่า
x >= y มากกว่าหรือเท่ากับ
x < y น้อยกว่า
x <= y น้อยกว่าหรือเท่ากับ
x = y Equal
x <> y Not equal
x or y ตรรกะแบบมีเงื่อนไข OR
x ?? y Coalesce
x and y ตรรกะแบบมีเงื่อนไข AND
not x ตรรกะ NOT

ชนิดเนทีฟของทั้งค่าตรรกะ (true และ false) คือชนิด logicalอินทรินซิก

หมายเลข

ค่าตัวเลขใช้สําหรับการดําเนินการตัวเลขและเลขคณิต ต่อไปนี้คือตัวอย่างของสัญพจน์จํานวน:

3.14  // Fractional number 
-1.5  // Fractional number 
1.0e3 // Fractional number with exponent
123   // Whole number 
1e3   // Whole number with exponent 
0xff  // Whole number in hex (255)

มีการแสดงแทนตัวเลขด้วยความแม่นยําของ Double เป็นอย่างน้อย (แต่อาจมีความแม่นยํามากกว่า) การ แทนค่า Double สอดคล้องกับมาตรฐานความแม่นยําแบบดับเบิล IEEE 64 บิตสําหรับเลขคณิตไบนารีแบบเลขทศนิยมลอยตัวที่กําหนดไว้ใน [IEEE 754-2008] (การ การแทนค่าสองเท่า มีช่วงไดนามิกโดยประมาณตั้งแต่ 5.0 x 10324 ถึง 1.7 x 10308 ด้วยความแม่นยําของตัวเลข 15-16 ตัว)

ค่าพิเศษต่อไปนี้จะถือว่าเป็น ค่าตัวเลข :

  • ศูนย์ด้านบวกและศูนย์ด้านลบ ในสถานการณ์ส่วนใหญ่ ค่าศูนย์ด้านบวกและศูนย์ด้านลบทํางานเหมือนกับค่าศูนย์อย่างง่าย แต่การดําเนินการบางอย่างแยกความแตกต่างระหว่างทั้งสอง

  • ค่าอินฟินิตี้ด้านบวก (#infinity) และค่าอินฟินิตี้ด้านลบ (-#infinity) ค่าอินฟินิตี้เกิดจากการดําเนินการ เช่น การหารจํานวนที่ไม่ใช่ศูนย์ด้วยศูนย์ ตัวอย่างเช่น 1.0 / 0.0 ค่าอินฟินิตี้ด้านบวกของผลตอบแทน และ -1.0 / 0.0 ค่าอินฟินิตี้ด้านลบของผลตอบแทน

  • ค่า Not-a-Number (#nan) มักใช้ตัวย่อว่า NaN NaNs เกิดจากการดําเนินการค่าจุดทศนิยมลอยตัวที่ไม่ถูกต้อง เช่น การหารศูนย์ด้วยศูนย์

การดําเนินการทางคณิตศาสตร์ไบนารีจะดําเนินการโดยใช้ ความแม่นยํา ความแม่นยํากําหนดโดเมนที่มีการปัดเศษตัวถูกดําเนินการ และโดเมนที่มีการดําเนินการ ในกรณีที่ไม่มีความแม่นยําที่ระบุไว้อย่างชัดเจน การดําเนินการดังกล่าวจะดําเนินการโดยใช้ ความแม่นยําแบบดับเบิล

  • ถ้าผลลัพธ์ของการดําเนินการทางคณิตศาสตร์มีขนาดเล็กเกินไปสําหรับรูปแบบปลายทาง ผลลัพธ์ของการดําเนินการจะกลายเป็นศูนย์ด้านบวกและศูนย์ด้านลบ

  • ถ้าผลลัพธ์ของการดําเนินการทางคณิตศาสตร์มีขนาดใหญ่เกินไปสําหรับรูปแบบปลายทาง ผลลัพธ์ของการดําเนินการจะกลายเป็นอินฟินิตี้ด้านบวกและอินฟินิตี้ด้านลบ

  • ถ้าการดําเนินการทางคณิตศาสตร์ไม่ถูกต้อง ผลลัพธ์ของการดําเนินการจะกลายเป็น NaN

  • ถ้าหนึ่งหรือทั้งสองตัวถูกดําเนินการของจุดทศนิยมลอยตัวคือ NaN ผลลัพธ์ของการดําเนินการจะกลายเป็น NaN

ตัวดําเนินการต่อไปนี้ถูกกําหนดไว้สําหรับค่าตัวเลข:

ตัวดำเนินการ ผลลัพธ์
x > y มากกว่า
x >= y มากกว่าหรือเท่ากับ
x < y น้อยกว่า
x <= y น้อยกว่าหรือเท่ากับ
x = y Equal
x <> y Not equal
x + y ผลรวม
x - y ผลต่าง
x * y ผลิตภัณฑ์
x / y ผลหาร
x ?? y Coalesce
+x การบวกยูนารี
-x ค่าลบ

ชนิดเนทีฟของค่าตัวเลขคือชนิด numberอินทรินซิก

เวลา

ค่าเวลา จัดเก็บการแทนค่าแบบย่อของเวลาของวัน มีการเข้ารหัสเวลาเป็นตัวเลข เครื่องหมายนับตั้งแต่เที่ยงคืน ซึ่งนับจํานวนเครื่องหมาย 100 นาโนวินาทีที่ผ่านไปในเวลา 24 ชั่วโมง จํานวนสูงสุดของ เครื่องหมายตั้งแต่เที่ยงคืน ตรงกับ 23:59:59.99999999 ชั่วโมง

แม้ว่าจะไม่มีไวยากรณ์สัญพจน์สําหรับเวลา แต่มีฟังก์ชันไลบรารีมาตรฐานหลายฟังก์ชันเพื่อสร้างฟังก์ชันเหล่านี้ นอกจากนี้ อาจมีการสร้างเวลาโดยใช้ฟังก์ชัน #timeอินทรินซิก :

#time(hour, minute, second)

สิ่งต่อไปนี้ต้องถูกระงับไว้ หรือมีข้อผิดพลาดที่มีรหัส Expression.Error เหตุผล เกิดขึ้น:

0 ชั่วโมง≤ ≤ 24
0 นาที≤ ≤ 59
0 ≤ วินาที ≤ 59

นอกจากนี้ ถ้า ชั่วโมง = 24 ดังนั้นนาทีและวินาทีจะต้องเป็นศูนย์

ตัวดําเนินการต่อไปนี้ถูกกําหนดไว้สําหรับค่าเวลา:

ตัวดำเนินการ ผลลัพธ์
x = y Equal
x <> y Not equal
x >= y มากกว่าหรือเท่ากับ
x > y มากกว่า
x < y น้อยกว่า
x <= y น้อยกว่าหรือเท่ากับ
x ?? y Coalesce

ตัวดําเนินการต่อไปนี้อนุญาตให้มีหนึ่งหรือทั้งสองอย่างเป็นวันที่:

ตัวดำเนินการ ตัวถูกดําเนินการด้านซ้าย ตัวถูกดําเนินการด้านขวา ความหมาย
x + y time duration ค่าชดเชยวันที่ตามระยะเวลา
x + y duration time ค่าชดเชยวันที่ตามระยะเวลา
x - y time duration ค่าชดเชยวันที่ตามระยะเวลาที่ลบล้าง
x - y time time ระยะเวลาระหว่างวันที่
x & y date time วันที่เวลาที่ผสาน

ชนิดเนทีฟของค่าเวลาคือชนิด timeอินทรินซิก

วันที่

ค่าวันที่ จัดเก็บการแทนค่าแบบย่อของวันที่เฉพาะเจาะจง วันที่ถูกเข้ารหัสเป็นจํานวน วันนับตั้งแต่ยุค เริ่มตั้งแต่วันที่ 1 มกราคม 0001 ศักราชกลางบนปฏิทินเกรกอเรียน จํานวนวันสูงสุดตั้งแต่ยุคคือ 3652058 ซึ่งสอดคล้องกับวันที่ 31 ธันวาคม 9999

แม้ว่าจะไม่มีไวยากรณ์สัญพจน์สําหรับวันที่ แต่มีฟังก์ชันไลบรารีมาตรฐานหลายฟังก์ชันเพื่อสร้างฟังก์ชันเหล่านี้ นอกจากนี้ยังสามารถสร้างวันที่โดยใช้ฟังก์ชัน #dateอินทรินซิก :

#date(year, month, day)

สิ่งต่อไปนี้ต้องถูกระงับไว้ หรือมีข้อผิดพลาดที่มีรหัส Expression.Error เหตุผล เกิดขึ้น:

≤ 1 ปี≤ 9999
1 เดือน≤ ≤ 12
วัน≤ 1 ≤ 31

นอกจากนี้ วันจะต้องถูกต้องสําหรับเดือนและปีที่เลือก

ตัวดําเนินการต่อไปนี้ถูกกําหนดไว้สําหรับค่าวันที่:

ตัวดำเนินการ ผลลัพธ์
x = y Equal
x <> y Not equal
x >= y มากกว่าหรือเท่ากับ
x > y มากกว่า
x < y น้อยกว่า
x <= y น้อยกว่าหรือเท่ากับ
x ?? y Coalesce

ตัวดําเนินการต่อไปนี้อนุญาตให้มีหนึ่งหรือทั้งสองอย่างเป็นวันที่:

ตัวดำเนินการ ตัวถูกดําเนินการด้านซ้าย ตัวถูกดําเนินการด้านขวา ความหมาย
x + y date duration ค่าชดเชยวันที่ตามระยะเวลา
x + y duration date ค่าชดเชยวันที่ตามระยะเวลา
x - y date duration ค่าชดเชยวันที่ตามระยะเวลาที่ลบล้าง
x - y date date ระยะเวลาระหว่างวันที่
x & y date time วันที่เวลาที่ผสาน

ชนิดเนทีฟของค่าวันที่คือชนิด dateอินทรินซิก

Datetime

ค่า วันที่เวลา มีทั้งวันที่และเวลา

แม้ว่าจะไม่มีไวยากรณ์สัญพจน์สําหรับ datetimes แต่มีฟังก์ชันไลบรารีมาตรฐานหลายรายการเพื่อสร้างฟังก์ชันเหล่านี้ นอกจากนี้ อาจสร้างวันที่เวลาโดยใช้ฟังก์ชัน #datetimeอินทรินซิก :

#datetime(year, month, day, hour, minute, second)

รายการต่อไปนี้ต้องถูกระงับไว้ หรือมีข้อผิดพลาดที่มีรหัสเหตุผล Expression.Error เกิดขึ้น: 1 ≤ปี≤ 9999
1 เดือน≤ ≤ 12
วัน≤ 1 ≤ 31
0 ชั่วโมง≤ ≤ 23
0 นาที≤ ≤ 59
0 ≤ วินาที ≤ 59

นอกจากนี้ วันจะต้องถูกต้องสําหรับเดือนและปีที่เลือก

ตัวดําเนินการต่อไปนี้ถูกกําหนดไว้สําหรับค่าวันที่เวลา:

ตัวดำเนินการ ผลลัพธ์
x = y Equal
x <> y Not equal
x >= y มากกว่าหรือเท่ากับ
x > y มากกว่า
x < y น้อยกว่า
x <= y น้อยกว่าหรือเท่ากับ
x ?? y Coalesce

ตัวดําเนินการต่อไปนี้อนุญาตให้มีหนึ่งหรือทั้งสองอย่างเป็นวันที่เวลา:

ตัวดำเนินการ ตัวถูกดําเนินการด้านซ้าย ตัวถูกดําเนินการด้านขวา ความหมาย
x + y datetime duration ค่าชดเชยวันที่เวลาตามระยะเวลา
x + y duration datetime ค่าชดเชยวันที่เวลาตามระยะเวลา
x - y datetime duration ค่าชดเชยวันที่เวลาตามระยะเวลาที่ลบล้าง
x - y datetime datetime ระยะเวลาระหว่างวันที่เวลา

ชนิดเนทีฟของค่าวันที่เวลาคือชนิด datetimeอินทรินซิก

โซนวันที่เวลา

ค่าโซนวันที่เวลาประกอบด้วยวันที่เวลาและโซนเวลา โซนเวลาจะถูกเข้ารหัสเป็นออฟเซ็ตนาทีจาก UTC ซึ่งนับจํานวนนาทีที่ส่วนเวลาของวันที่เวลาควรเป็นค่าออฟเซตจากเวลาสากลเชิงพิกัด (UTC) จํานวนต่ําสุดของ ออฟเซ็ตนาทีจาก UTC คือ -840 แทนออฟเซ็ต UTC ที่ -14:00 หรือเร็วกว่า UTC สิบสี่ชั่วโมง จํานวนสูงสุดของ ออฟเซ็ตนาทีจาก UTC คือ 840 ที่สอดคล้องกับออฟเซ็ต UTC ของ 14:00

แม้ว่าจะไม่มีไวยากรณ์สัญพจน์สําหรับเขตวันที่เวลา แต่จะมีฟังก์ชันไลบรารีมาตรฐานหลายรายการเพื่อสร้างฟังก์ชันเหล่านี้ นอกจากนี้ อาจสร้างเขตวันที่เวลาโดยใช้ฟังก์ชัน #datetimezoneอินทรินซิก :

#datetimezone(
       year, month, day,
       hour, minute, second,
       offset-hours, offset-minutes)

สิ่งต่อไปนี้ต้องถูกระงับไว้ หรือมีข้อผิดพลาดที่มีรหัส Expression.Error เหตุผล เกิดขึ้น:

≤ 1 ปี≤ 9999
1 เดือน≤ ≤ 12
วัน≤ 1 ≤ 31
0 ชั่วโมง≤ ≤ 23
0 นาที≤ ≤ 59
0 ≤ วินาที ≤ 59
-14 ≤ค่าชดเชยชั่วโมง≤ 14
-59 ≤ค่าชดเชยนาที≤ 59

นอกจากนี้ วันจะต้องถูกต้องสําหรับเดือนและปีที่เลือก และถ้าค่าชดเชยชั่วโมง = 14 วันค่าชดเชยนาที <= 0 และถ้าค่าชดเชยชั่วโมง = -14 ค่าชดเชยนาที >= 0

ตัวดําเนินการต่อไปนี้ถูกกําหนดไว้สําหรับค่าโซนวันที่เวลา:

ตัวดำเนินการ ผลลัพธ์
x = y Equal
x <> y Not equal
x >= y มากกว่าหรือเท่ากับ
x > y มากกว่า
x < y น้อยกว่า
x <= y น้อยกว่าหรือเท่ากับ
x ?? y Coalesce

ตัวดําเนินการต่อไปนี้อนุญาตให้มีหนึ่งหรือทั้งสองอย่างเป็นโซนวันที่เวลา:

ตัวดำเนินการ ตัวถูกดําเนินการด้านซ้าย ตัวถูกดําเนินการด้านขวา ความหมาย
x + y datetimezone duration ค่าชดเชยเขตวันที่เวลาตามระยะเวลา
x + y duration datetimezone ค่าชดเชยเขตวันที่เวลาตามระยะเวลา
x - y datetimezone duration ค่าชดเชยเขตวันที่เวลาตามระยะเวลาที่ลบล้าง
x - y datetimezone datetimezone ระยะเวลาระหว่างเขตวันที่เวลา

ชนิดเนทีฟของค่าโซนวันที่เวลาคือชนิด datetimezoneอินทรินซิก

ระยะเวลา

ค่าระยะเวลา จัดเก็บการแทนค่าแบบทึบแสงของระยะห่างระหว่างสองจุดบนเส้นเวลาที่วัดเห็บ 100 นาโนวินาที ขนาดของ ระยะเวลา อาจเป็นค่าบวกหรือลบ โดยค่าบวกแสดงถึงความคืบหน้าไปข้างหน้าในเวลาและค่าลบแสดงถึงความคืบหน้าย้อนหลังในเวลา ค่าต่ําสุดที่สามารถจัดเก็บใน ระยะเวลา คือเครื่องหมาย -9,223,372,036,854,775,808 หรือ 10,675,199 วัน 2 ชั่วโมง 48 นาที 05.4775808 วินาที ย้อนหลังในเวลา ค่าสูงสุดที่สามารถจัดเก็บใน ระยะเวลา คือเครื่องหมาย 9,223,372,036,854,775,807 หรือ 10,675,199 วัน 2 ชั่วโมง 48 นาที 05.4775807 วินาที ไปข้างหน้าในเวลา

แม้ว่าจะไม่มีไวยากรณ์สัญพจน์สําหรับระยะเวลา แต่มีฟังก์ชันไลบรารีมาตรฐานหลายฟังก์ชันเพื่อสร้างฟังก์ชันเหล่านี้ นอกจากนี้ยังสามารถสร้างระยะเวลาโดยใช้ฟังก์ชัน #durationอินทรินซิก :

#duration(0, 0, 0, 5.5)          // 5.5 seconds 
#duration(0, 0, 0, -5.5)         // -5.5 seconds 
#duration(0, 0, 5, 30)           // 5.5 minutes 
#duration(0, 0, 5, -30)          // 4.5 minutes 
#duration(0, 24, 0, 0)           // 1 day 
#duration(1, 0, 0, 0)            // 1 day

ตัวดําเนินการต่อไปนี้ถูกกําหนดไว้ในค่าระยะเวลา:

ตัวดำเนินการ ผลลัพธ์
x = y Equal
x <> y Not equal
x >= y มากกว่าหรือเท่ากับ
x > y มากกว่า
x < y น้อยกว่า
x <= y น้อยกว่าหรือเท่ากับ
x ?? y Coalesce

นอกจากนี้ ตัวดําเนินการต่อไปนี้อนุญาตให้มีตัวถูกดําเนินการหนึ่งหรือทั้งสองเป็นค่าระยะเวลา:

ตัวดำเนินการ ตัวถูกดําเนินการด้านซ้าย ตัวถูกดําเนินการด้านขวา ความหมาย
x + y datetime duration ค่าชดเชยวันที่เวลาตามระยะเวลา
x + y duration datetime ค่าชดเชยวันที่เวลาตามระยะเวลา
x + y duration duration ผลรวมของระยะเวลา
x - y datetime duration ค่าชดเชยวันที่เวลาตามระยะเวลาที่ลบล้าง
x - y datetime datetime ระยะเวลาระหว่างวันที่เวลา
x - y duration duration ความแตกต่างของระยะเวลา
x * y duration number N ครั้งต่อระยะเวลา
x * y number duration N ครั้งต่อระยะเวลา
x / y duration number เศษส่วนของระยะเวลา

ชนิดเนทีฟของค่าระยะเวลาคือชนิด durationอินทรินซิก

ข้อความ

ค่าข้อความแสดงถึงลําดับของอักขระ Unicode ค่าข้อความมีฟอร์มสัญพจน์ที่สอดคล้องกับไวยากรณ์ต่อไปนี้:

_text-literal:
      " text-literal-characteropt "
text-literal-character:
      text-literal-character text-literal-characteropt
text-literal-character:
      อักขระข้อความเดียว
      ลําดับ character-escape
      double-quote-escape-sequence
อักขระข้อความเดียว:

      อักขระใดๆ ยกเว้น " (U+0022) หรือ # (U+0023) ตามด้วย ( (U+0028)
double-quote-escape-sequence:
      "" (U+0022, U+0022)

ต่อไปนี้เป็นตัวอย่างของ ค่าข้อความ :

"ABC" // the text value ABC

ตัวดําเนินการต่อไปนี้ถูกกําหนดไว้ใน ค่าข้อความ :

ตัวดำเนินการ ผลลัพธ์
x = y Equal
x <> y Not equal
x >= y มากกว่าหรือเท่ากับ
x > y มากกว่า
x < y น้อยกว่า
x <= y น้อยกว่าหรือเท่ากับ
x & y การเรียงต่อกัน
x ?? y Coalesce

ชนิดเนทีฟของค่าข้อความคือชนิด textอินทรินซิก

ไบนารี

ค่าไบนารีแสดงถึงลําดับไบต์

แม้ว่าจะไม่มีไวยากรณ์สัญพจน์สําหรับค่าไบนารี แต่จะมีฟังก์ชันไลบรารีมาตรฐานหลายรายการเพื่อสร้างฟังก์ชันเหล่านี้ นอกจากนี้ อาจมีการสร้างค่าไบนารีโดยใช้ฟังก์ชัน #binaryอินทรินซิก

ตัวอย่างต่อไปนี้สร้างค่าไบนารีจากรายการไบต์:

#binary( {0x00, 0x01, 0x02, 0x03} )

ตัวดําเนินการต่อไปนี้ถูกกําหนดไว้ใน ค่าไบนารี :

ตัวดำเนินการ ผลลัพธ์
x = y Equal
x <> y Not equal
x >= y มากกว่าหรือเท่ากับ
x > y มากกว่า
x < y น้อยกว่า
x <= y น้อยกว่าหรือเท่ากับ
x ?? y Coalesce

ชนิดเนทีฟของค่าไบนารีคือชนิดอินทรินซิกไบนารี

List

ค่ารายการ เป็นค่าที่สร้างลําดับของค่าเมื่อแจกแจง ค่าที่สร้างขึ้นจากรายการสามารถมีค่าชนิดใดก็ได้ รวมถึงรายการ คุณสามารถสร้างรายการได้โดยใช้ไวยากรณ์การเตรียมใช้งาน ดังต่อไปนี้:

list-expression:
      { item-listopt }
item-list:
      รายการ
      item-list
,
รายการ:
      สีหน้า
      นิพจน์
..

ต่อไปนี้เป็นตัวอย่างของ list-expression ที่กําหนดรายการที่มีค่าข้อความสามค่า: "A", "B"และ"C"

{"A", "B", "C"}

ค่า "A" เป็นหน่วยข้อมูลแรกในรายการ และค่า "C" เป็นหน่วยข้อมูลสุดท้ายในรายการ

  • ไม่มีการประเมินหน่วยข้อมูลของรายการจนกว่าจะมีการเข้าถึงข้อมูลดังกล่าว
  • ในขณะที่ค่ารายการที่สร้างขึ้นโดยใช้ไวยากรณ์รายการจะสร้างหน่วยข้อมูลตามลําดับที่ปรากฏใน item-list โดยทั่วไปแล้ว รายการที่ส่งกลับจากฟังก์ชันไลบรารีอาจสร้างชุดที่แตกต่างกันหรือจํานวนค่าที่แตกต่างกันในแต่ละครั้งที่มีการแจกแจง

หากต้องการรวมลําดับของจํานวนทั้งหมดในรายการ a..b สามารถใช้ฟอร์มได้:

{ 1, 5..9, 11 }     // { 1, 5, 6, 7, 8, 9, 11 }

สามารถกําหนดจํานวนของหน่วยข้อมูลในรายการ ที่เรียกว่าจํานวนรายการได้โดยใช้List.Countฟังก์ชัน

List.Count({true, false})  // 2 
List.Count({})             // 0

รายการอาจมีจํานวนหน่วยข้อมูลที่ไม่มีที่สิ้นสุดได้อย่างมีประสิทธิภาพ List.Count สําหรับรายการดังกล่าวไม่ได้ถูกกําหนดและอาจทําให้เกิดข้อผิดพลาดหรือไม่ยุติ

ถ้ารายการไม่มีหน่วยข้อมูล รายการดังกล่าวจะถูกเรียกว่า รายการว่างเปล่า รายการว่างเปล่าจะถูกเขียนเป็น:

{}  // empty list

ตัวดําเนินการต่อไปนี้ถูกกําหนดไว้สําหรับรายการ:

ตัวดำเนินการ ผลลัพธ์
x = y Equal
x <> y Not equal
x & y Concatenate
x ?? y Coalesce

ตัวอย่างเช่น:

{1, 2} & {3, 4, 5}   // {1, 2, 3, 4, 5} 
{1, 2} = {1, 2}      // true 
{2, 1} <> {1, 2}     // true

ชนิดเนทีฟของค่ารายการคือชนิดlistอินทรินซิก ซึ่งระบุชนิดหน่วยข้อมูลของany

บันทึก

ค่าเรกคอร์ด เป็นลําดับเขตข้อมูลที่มีการเรียงลําดับ เขตข้อมูลประกอบด้วยชื่อเขตข้อมูล ซึ่งเป็นค่าข้อความที่ระบุเขตข้อมูลภายในเรกคอร์ดโดยไม่ซ้ํากัน และค่าเขตข้อมูล ค่าเขตข้อมูลอาจเป็นค่าชนิดใดก็ได้ รวมถึงเรกคอร์ด คุณสามารถสร้างเรกคอร์ดได้โดยใช้ไวยากรณ์การเตรียมใช้งาน ดังต่อไปนี้:

record-expression:
      [ การเลือกรายการเขตข้อมูล ]
field-list:
      สนาม
      field-list
,
สนาม:
      นิพจน์ field-name
=
field-name:
      generalized-identifier
      quoted-identifier

ตัวอย่างต่อไปนี้สร้างเรกคอร์ดที่มีเขตข้อมูลที่xชื่อด้วยค่า 1และเขตข้อมูลที่yชื่อว่า ด้วยค่า2

[ x = 1, y = 2 ]

ตัวอย่างต่อไปนี้สร้างเรกคอร์ดที่มี a เขตข้อมูล ที่ชื่อ a ด้วยค่าเรกคอร์ดแบบซ้อน เรกคอร์ดแบบซ้อนมีเขตข้อมูลที่ชื่อว่า b ด้วยค่า2

[ a = [ b = 2 ] ]

รายการต่อไปนี้จะถูกระงับไว้ขณะประเมินนิพจน์เรกคอร์ด:

  • นิพจน์ที่กําหนดให้กับแต่ละชื่อเขตข้อมูลถูกใช้เพื่อกําหนดค่าของเขตข้อมูลที่เกี่ยวข้อง

  • ถ้านิพจน์ที่กําหนดให้กับชื่อเขตข้อมูลสร้างค่าเมื่อประเมินผล จากนั้นค่าจะกลายเป็นค่าของเขตข้อมูลของเรกคอร์ดผลลัพธ์

  • ถ้านิพจน์ที่กําหนดให้กับชื่อเขตข้อมูลทําให้เกิดข้อผิดพลาดเมื่อประเมินค่า จากนั้นข้อเท็จจริงที่เกิดขึ้นจะถูกบันทึกด้วยเขตข้อมูล พร้อมกับค่าข้อผิดพลาดที่เกิดขึ้น การเข้าถึงเขตข้อมูลนั้นในภายหลังจะทําให้เกิดข้อผิดพลาดอีกครั้งพร้อมค่าข้อผิดพลาดที่บันทึกไว้

  • นิพจน์จะถูกประเมินในสภาพแวดล้อม เช่น สภาพแวดล้อมระดับพ่อแม่เท่านั้น โดยมีตัวแปรที่ผสานรวมอยู่ในนั้นซึ่งสอดคล้องกับค่าของเขตข้อมูลทั้งหมดของเรกคอร์ด ยกเว้นตัวแปรที่มีการเตรียมใช้งาน

  • ค่าในเรกคอร์ดจะไม่ถูกประเมินจนกว่าจะมีการเข้าถึงเขตข้อมูลที่สอดคล้องกัน

  • ค่าในเรกคอร์ดจะถูกประเมินมากที่สุดหนึ่งครั้ง

  • ผลลัพธ์ของนิพจน์คือค่าเรกคอร์ดที่มีเรกคอร์ดเมตาดาต้าว่างเปล่า

  • ลําดับของเขตข้อมูลภายในเรกคอร์ดจะถูกกําหนดตามลําดับที่ปรากฏใน record-initializer-expression

  • ชื่อเขตข้อมูลทั้งหมดที่ระบุต้องไม่ซ้ํากันภายในเรกคอร์ด หรือเป็นข้อผิดพลาด มีการเปรียบเทียบชื่อโดยใช้การเปรียบเทียบแบบเลขแสดง (ordinal)

    [ x = 1, x = 2 ] // error: field names must be unique 
    [ X = 1, x = 2 ] // OK

เรกคอร์ดที่ไม่มีเขตข้อมูลถูกเรียกว่า เรกคอร์ดว่างเปล่า และเขียนเป็นดังนี้:

[] // empty record

แม้ว่าลําดับของเขตข้อมูลของเรกคอร์ดจะไม่มีนัยสําคัญเมื่อเข้าถึงเขตข้อมูลหรือเปรียบเทียบเรกคอร์ดสองเรกคอร์ด แต่จะมีความสําคัญในบริบทอื่นเช่นเมื่อมีการแจกแจงเขตข้อมูลของเรกคอร์ด

เรกคอร์ดสองรายการเดียวกันสร้างผลลัพธ์ที่แตกต่างกันเมื่อได้รับเขตข้อมูล:

Record.FieldNames([ x = 1, y = 2 ]) // [ "x", "y" ] 
Record.FieldNames([ y = 1, x = 2 ]) // [ "y", "x" ]

คุณสามารถกําหนดจํานวนเขตข้อมูลในเรกคอร์ดโดยใช้ Record.FieldCount ฟังก์ชัน ตัวอย่างเช่น:

Record.FieldCount([ x = 1, y = 2 })  // 2 
Record.FieldCount([])                // 0

นอกจากการใช้ไวยากรณ์ [ ]การเตรียมใช้งานเรกคอร์ด คุณยังสามารถสร้างเรกคอร์ดจากรายการของค่า และรายการของชื่อเขตข้อมูลหรือชนิดของเรกคอร์ดได้ ตัวอย่างเช่น:

Record.FromList({1, 2}, {"a", "b"})

ข้างต้นเทียบเท่ากับ:

[ a = 1, b = 2 ]

ตัวดําเนินการต่อไปนี้ถูกกําหนดไว้สําหรับค่าเรกคอร์ด:

ตัวดำเนินการ ผลลัพธ์
x = y Equal
x <> y Not equal
x & y ผสาน
x ?? y Coalesce

ตัวอย่างต่อไปนี้แสดงตัวดําเนินการด้านบน โปรดทราบว่าการผสานรวมเรกคอร์ดใช้เขตข้อมูลจากตัวถูกดําเนินการด้านขวาเพื่อแทนที่เขตข้อมูลจากตัวถูกดําเนินการด้านซ้ายหากมีการทับซ้อนในชื่อเขตข้อมูล

[ a = 1, b = 2 ] & [ c = 3 ]    // [ a = 1, b = 2, c = 3 ] 
[ a = 1, b = 2 ] & [ a = 3 ]    // [ a = 3, b = 2 ] 
[ a = 1, b = 2 ] = [ b = 2, a = 1 ]         // true 
[ a = 1, b = 2, c = 3 ] <> [ a = 1, b = 2 ] // true

ชนิดเนทีฟของค่าเรกคอร์ดคือชนิด recordอินทรินซิก ซึ่งระบุรายการเขตข้อมูลว่างที่เปิดอยู่

Table

ค่าตาราง เป็นลําดับแถวที่มีการเรียงลําดับ แถว เป็นลําดับค่าคอลัมน์ที่มีการเรียงลําดับ ชนิดของตารางจะกําหนดความยาวของแถวทั้งหมดในตาราง ชื่อของคอลัมน์ในตาราง ชนิดของคอลัมน์ในตาราง และโครงสร้างของคีย์ในตาราง (ถ้ามี)

แม้ว่าจะไม่มีไวยากรณ์สัญพจน์สําหรับตาราง แต่มีฟังก์ชันไลบรารีมาตรฐานหลายฟังก์ชันเพื่อสร้างฟังก์ชันเหล่านี้ ตารางอาจถูกสร้างขึ้นโดยใช้ฟังก์ชัน #tableอินทรินซิก

ตัวอย่างต่อไปนี้สร้างตารางจากรายการชื่อคอลัมน์และรายการของแถว ตารางผลลัพธ์จะมีสองคอลัมน์และ type any สามแถว

#table({"x", "x^2"}, {{1,1}, {2,4}, {3,9}})

#table นอกจากนี้ ยังสามารถใช้เพื่อระบุชนิดตารางแบบเต็ม:

#table(
    type table [Digit = number, Name = text],  
    {{1,"one"}, {2,"two"}, {3,"three"}} 
    )

ในส่วนนี้ค่าตารางใหม่มีชนิดตารางที่ระบุชื่อคอลัมน์และชนิดคอลัมน์

ตัวดําเนินการต่อไปนี้ถูกกําหนดไว้สําหรับค่าตาราง:

ตัวดำเนินการ ผลลัพธ์
x = y Equal
x <> y Not equal
x & y การเรียงต่อกัน
x ?? y Coalesce

การต่อข้อมูลตารางจัดเรียงคอลัมน์ที่มีชื่อเหมือนกันและเติมใน null สําหรับคอลัมน์ที่ปรากฏในตารางตัวถูกดําเนินการตัวใดตัวหนึ่งเท่านั้น ตัวอย่างต่อไปนี้แสดงตัวอย่างการต่อข้อมูลตาราง:

  #table({"A","B"}, {{1,2}}) 
& #table({"B","C"}, {{3,4}})
A B C
1 2 null
null 3 4

ชนิดเนทีฟของค่าตารางเป็นชนิดตารางแบบกําหนดเอง (มาจากชนิด tableอินทรินซิก ) ที่แสดงชื่อคอลัมน์ ระบุชนิดคอลัมน์ทั้งหมดเป็นค่าใดก็ตาม และไม่มีคีย์ (ไปที่ ชนิด ตารางสําหรับรายละเอียดเกี่ยวกับชนิดตาราง)

Function

ค่าฟังก์ชันเป็นค่าที่แมปชุดอาร์กิวเมนต์เป็นค่าเดียว รายละเอียดของค่าฟังก์ชันมีการอธิบายไว้ใน ฟังก์ชัน

ขนิด

ค่าชนิด คือค่าที่ใช้ในการจัดประเภทค่าอื่น ๆ รายละเอียดของค่าชนิดมีการอธิบายไว้ใน Types