ค่า
บทความ 27/08/2566
3 ผู้สนับสนุน
คำติชม
ในบทความนี้
Null
ตรรกะ
หมายเลข
เวลา
วันที่
Datetime
โซนวันที่เวลา
ระยะเวลา
ข้อความ
ไบนารี
List
บันทึก
Table
Function
ขนิด
แสดง 11 เพิ่มเติม
ค่า คือข้อมูลที่ผลิตโดยการประเมินนิพจน์ ในส่วนนี้จะอธิบายชนิดของค่าในภาษา 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:
ขยายตาราง
ตัวดำเนินการ
ผลลัพธ์
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
อินทรินซิก
ค่า วันที่เวลา มีทั้งวันที่และเวลา
แม้ว่าจะไม่มีไวยากรณ์สัญพจน์สําหรับ 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-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
อินทรินซิก
ตัวอย่างต่อไปนี้สร้างตารางจากรายการชื่อคอลัมน์และรายการของแถว ตารางผลลัพธ์จะมีสองคอลัมน์และ 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}})
ขยายตาราง
ชนิดเนทีฟของค่าตารางเป็นชนิดตารางแบบกําหนดเอง (มาจากชนิด table
อินทรินซิก ) ที่แสดงชื่อคอลัมน์ ระบุชนิดคอลัมน์ทั้งหมดเป็นค่าใดก็ตาม และไม่มีคีย์ (ไปที่ ชนิด ตารางสําหรับรายละเอียดเกี่ยวกับชนิดตาราง)
ค่า ฟังก์ชันเป็นค่าที่แมปชุดอาร์กิวเมนต์เป็นค่าเดียว รายละเอียดของค่าฟังก์ชัน มีการอธิบายไว้ใน ฟังก์ชัน
ค่า ชนิด คือค่าที่ใช้ในการจัดประเภทค่าอื่น ๆ รายละเอียดของค่าชนิด มีการอธิบายไว้ใน Types