ค่า
ค่า คือข้อมูลที่ผลิตโดยการประเมินนิพจน์ ในส่วนนี้จะอธิบายชนิดของค่าในภาษา 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