Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu bölüm, çeşitli M işleçlerinin davranışını tanımlar.
İşleç önceliği
bir ifade birden çok işleç içerdiğinde, işleçlerin önceliği tek tek işleçlerin değerlendirilme sırasını denetler. Örneğin, işlecin ikili x + y * z işleçten daha yüksek önceliğe sahip olması nedeniyle x + (y * z) ifade * olarak + değerlendirilir. Bir işlecin önceliği, ilişkili dil bilgisi üretiminin tanımıyla oluşturulur. Örneğin, bir ekleme ifadesi, veya işleçleriyle ayrılmış bir çarpımsal ifade+oluşur ve işleçlerine ve - işleçlerinden daha + düşük öncelik verir -*./
Parantezli-ifade üretimi, varsayılan öncelik sıralamasını değiştirmek için kullanılabilir.
parantez-ifade:
(
ifade)
Örneğin:
1 + 2 * 3 // 7
(1 + 2) * 3 // 9
Aşağıdaki tabloda M işleçleri özetlenmiştir ve işleç kategorileri en yüksekten en düşüğe öncelik sırasına göre listelenmiştir. Aynı kategorideki işleçler eşit önceliğe sahiptir.
| Kategori | Expression | Açıklama |
|---|---|---|
| Birincil |
ben @ ben |
Tanımlayıcı ifadesi |
| (x) | Parantez içinde ifade | |
| x[i] | Arama | |
| x{y} | Öğe erişimi | |
| x(...) | İşlev çağırma | |
| {x, y, ...} | Liste başlatma | |
| [ i = x, ... ] | Kayıt başlatma | |
| ... | Uygulanmadı | |
| Birli | + x | Kimlik |
| - x | Olumsuzlama | |
not
x |
Mantıksal değilleme | |
| Meta veri |
xmetay |
Meta verileri ilişkilendirme |
| Çarpma | x * y | Çarpma |
| x / y | Bölüm | |
| Katkı | x + y | Ekleme |
| x - y | Çıkarma | |
| İlişkisel | x< y | Küçüktür |
| x > y | Büyüktür | |
| x<= y | Küçüktür veya eşittir | |
| x >= y | Büyüktür veya eşittir | |
| Eşitlik | x = y | Eşittir |
| x<> y | Eşit değil | |
| Tür onayı |
xasy |
Uyumlu ilkel/null atanabilir ilkel tür veya hata |
| Tür uyumluluğu |
xisy |
Türün ilkel türle mi yoksa null atanabilir ilkel türle mi uyumlu olduğunu test edin |
| Mantıksal VE |
xandy |
Kısa devre bağla |
| Mantıksal VEYA |
xory |
Kısa devreli ayrıştırma |
| Coalesce |
x??y |
Null birleşim işleci |
İşleçler ve meta veriler
Her değerin, değer hakkında ek bilgi taşıyabilen ilişkili bir kayıt değeri vardır. Bu kayıt, bir değerin meta veri kaydı olarak adlandırılır. Meta veri kaydı, bile nullher tür değerle ilişkilendirilebilir. Böyle bir ilişkilendirmenin sonucu, verilen meta verilerle yeni bir değerdir.
Meta veri kaydı yalnızca normal bir kayıttır ve normal bir kaydın içerebileceği tüm alanları ve değerleri içerebilir ve kendisi bir meta veri kaydına sahiptir. Meta veri kaydını bir değerle ilişkilendirmek "müdahaleci değildir". Meta veri kayıtlarını açıkça inceleyenler dışında değerlendirmelerdeki değerin davranışını değiştirmez.
Belirtilmemiş olsa bile her değerin varsayılan meta veri kaydı vardır. Varsayılan meta veri kaydı boş. Aşağıdaki örneklerde, standart kitaplık işlevini kullanarak bir metin değerinin meta veri kaydına Value.Metadata erişim gösterilmektedir:
Value.Metadata( "Mozart" ) // []
Yeni bir değer oluşturan bir işleç veya işlevle bir değer kullanıldığında meta veri kayıtları genellikle korunmaz . Örneğin, işleci kullanılarak & iki metin değeri birleştirilirse, sonuçta elde edilen metin değerinin meta verileri boş kayıt []olur. Aşağıdaki ifadeler eşdeğerdir:
"Amadeus " & ("Mozart" meta [ Rating = 5 ])
"Amadeus " & "Mozart"
Standart kitaplık işlevidir Value.RemoveMetadata ve Value.ReplaceMetadata bir değerdeki tüm meta verileri kaldırmak ve bir değerin meta verilerini değiştirmek için kullanılabilir (meta verileri mevcut meta verilerde birleştirmek yerine).
Meta verileri taşıyan sonuçları döndüren tek işleç meta işlecidir.
Yapısal özyinelemeli işleçler
Değerler döngüsel olabilir. Örneğin:
let l = {0, @l} in l
// {0, {0, {0, ... }}}
[A={B}, B={A}]
// [A = {{ ... }}, B = {{ ... }}]
M, kayıtların, listelerin ve tabloların oluşturulmasını gecikmeli tutarak döngüsel değerleri işler. Gecikmeli yapılandırılmış gecikmeli değerlerden yararlanmayan döngüsel bir değer oluşturma girişimi şu hatayı verir:
[A=B, B=A]
// [A = Error.Record("Expression.Error",
// "A cyclic reference was encountered during evaluation"),
// B = Error.Record("Expression.Error",
// "A cyclic reference was encountered during evaluation"),
// ]
M'deki bazı işleçler yapısal özyineleme ile tanımlanır. Örneğin, kayıtların ve listelerin eşitliği, karşılık gelen kayıt alanlarının ve öğe listelerinin birleştirilmiş eşitliği tarafından tanımlanır.
Döngüsel olmayan değerler için yapısal özyineleme uygulanması değerin sonlu genişlemesini sağlar: paylaşılan iç içe değerler tekrar tekrar geçirilir, ancak özyineleme işlemi her zaman sonlandırılır.
Döngüsel değer, yapısal özyineleme uygulanırken sonsuz bir genişlemeye sahiptir. M semantiği, bu tür sonsuz genişletmeler için özel bir konaklama birimi oluşturmaz; örneğin, eşitlik için döngüsel değerleri karşılaştırma girişimi genellikle kaynakları tükenir ve olağanüstü bir şekilde sonlandırılır.
Seçim ve Projeksiyon İşleçleri
Seçim ve projeksiyon işleçleri, verilerin liste ve kayıt değerlerinden ayıklanmasına olanak sağlar.
Öğe Erişimi
Bir liste veya tablodan, öğe-erişim-ifadesi kullanılarak bu liste veya tablo içindeki sıfır tabanlı konumuna göre bir değer seçilebilir.
item-access-expression:
öğe seçimi
isteğe bağlı-öğe-seçimi
öğe seçimi:
birincil-ifade{öğe seçicisi}
isteğe bağlı-öğe-seçimi:
birincil-ifade{öğe seçicisi} ?
öğe seçici:
ifade
item-access-expressionx{y} şunu döndürür:
Bir liste
xve sayıyiçin, konumundakixlisteyöğesi. Listenin ilk öğesi sıfır sıralı dizine sahip olarak kabul edilir. İstenen konum listede yoksa bir hata oluşur.Bir tablo
xve sayıyiçin, konumundakixtabloysatırı. Tablonun ilk satırının sıralı dizini sıfır olarak kabul edilir. İstenen konum tabloda yoksa bir hata oluşur.Bir tablo
xve kayıtyiçin, karşılık gelen tablo-sütunxadlarıyla eşleşen alan adlarına sahip alanlar için kaydınyalan değerleriyle eşleşen tablo satırı. Tabloda benzersiz eşleşen satır yoksa bir hata oluşur.
Örneğin:
{"a","b","c"}{0} // "a"
{1, [A=2], 3}{1} // [A=2]
{true, false}{2} // error
#table({"A","B"},{{0,1},{2,1}}){0} // [A=0,B=1]
#table({"A","B"},{{0,1},{2,1}}){[A=2]} // [A=2,B=1]
#table({"A","B"},{{0,1},{2,1}}){[B=3]} // error
#table({"A","B"},{{0,1},{2,1}}){[B=1]} // error
Item-access-expression, liste veya tabloda x{y}?konum (veya eşleşme) null olmadığında döndüren y formunu xda destekler. için ybirden çok eşleşme varsa, yine de bir hata oluşur.
Örneğin:
{"a","b","c"}{0}? // "a"
{1, [A=2], 3}{1}? // [A=2]
{true, false}{2}? // null
#table({"A","B"},{{0,1},{2,1}}){0}? // [A=0,B=1]
#table({"A","B"},{{0,1},{2,1}}){[A=2]}? // [A=2,B=1]
#table({"A","B"},{{0,1},{2,1}}){[B=3]}? // null
#table({"A","B"},{{0,1},{2,1}}){[B=1]}? // error
Öğe erişimi, erişilen öğe dışındaki liste veya tablo öğelerinin değerlendirilmesini zorlamaz. Örneğin:
{ error "a", 1, error "c"}{1} // 1
{ error "a", error "b"}{1} // error "b"
Öğe erişim işleci x{y} değerlendirildiğinde aşağıdakiler geçerli olur:
İfadelerin
xdeğerlendirilmesi sırasında oluşan veyayyayılan hatalar.İfade
xbir liste veya tablo değeri oluşturur.İfade
ybir sayı değeri veya tablo değeri üretirsexbir kayıt değeri oluşturur.Sayı değeri üretirse
yve değeriynegatifse, neden koduyla"Expression.Error"bir hata oluşur.Bir sayı değeri üretirse ve değeri değerinden
ybüyük veya değerine eşitsey, isteğe bağlı işleç formuxkullanılmadığı sürece neden koduyla"Expression.Error"bir hata oluşur ve bu durumda değerx{y}?döndürülür.nullTablo değeri üretirse ve
xbir kayıt değeri üretirseyve içindeyiçinxeşleşme yoksa, isteğe bağlı işleç formu"Expression.Error"kullanılmadığı sürece neden koduylax{y}?ilgili bir hata oluşur ve bu durumda değernulldöndürülür.Bir tablo değeri üretir ve
xbir kayıt değeri üretirseyve içindeyiçinxbirden çok eşleşme varsa, neden koduyla"Expression.Error"ilgili bir hata oluşur.
x Öğe seçimi işlemi sırasında konumundaki y dışında hiçbir öğe değerlendirilmez. (Akış listeleri veya tabloları için, konumdan y önceki öğeler veya satırlar atlanır ve bu da listenin veya tablonun kaynağına bağlı olarak değerlendirmelerine neden olabilir.)
Alan Erişimi
Alan erişim-ifadesi, bir kayıttan bir değer seçmek veya bir kaydı veya tabloyu sırasıyla daha az alan veya sütuna sahip bir değere yansıtmak için kullanılır.
field-access-expression:
alan seçimi
örtük hedef-alan-seçimi
projeksiyon
örtük hedef yansıtma
alan seçimi:
birincil-ifade alan seçicisi
alan seçici:
required-field-selector
isteğe bağlı-alan seçici
required-field-selector:
[
alan adı]
optional-field-selector:
[
alan adı] ?
alan-adı:
genelleştirilmiş tanımlayıcı
quoted-identifier
örtük-hedef-alan-seçimi:
alan seçici
projeksiyon:
birincil-ifade gerekli-projeksiyon
birincil-ifade isteğe bağlı-projeksiyon
gerekli yansıtma:
[
required-selector-list]
isteğe bağlı yansıtma:
[
required-selector-list] ?
required-selector-list:
required-field-selector
required-selector-list,required-field-selector
örtük hedef-projeksiyon:
gerekli yansıtma
isteğe bağlı yansıtma
Alan erişiminin en basit biçimi, gerekli alan seçimidir. Kayıttaki bir alanı alan adına göre aramak için işlecini x[y] kullanır. alanı y içinde xyoksa bir hata oluşur. Formx[y]?, isteğe bağlı alan seçimi gerçekleştirmek için kullanılır ve istenen alan kayıtta yoksa döndürürnull.
Örneğin:
[A=1,B=2][B] // 2
[A=1,B=2][C] // error
[A=1,B=2][C]? // null
Birden çok alanın toplu erişimi, gerekli kayıt projeksiyonu ve isteğe bağlı kayıt projeksiyonu için işleçler tarafından desteklenir. işlecix[[y1],[y2],...], kaydı daha az alan içeren yeni bir kayda (, , y1y2tarafından seçilir...) projeler. Seçili alan yoksa bir hata oluşur. işlecix[[y1],[y2],...]?, kaydı , , y1y2tarafından seçilen ...alanlarla yeni bir kayda projeler; bunun yerine bir alan eksikse null kullanılır.
Örneğin:
[A=1,B=2][[B]] // [B=2]
[A=1,B=2][[C]] // error
[A=1,B=2][[B],[C]]? // [B=2,C=null]
ve [y] formları[y]?, tanımlayıcıya (alt çizgi) yönelik bir _ olarak desteklenir. Aşağıdaki iki ifade eşdeğerdir:
[A]
_[A]
Aşağıdaki örnekte alan erişiminin kısaltma biçimi gösterilmektedir:
let _ = [A=1,B=2] in [A] //1
ve formu [[y1],[y2],...][[y1],[y2],...]? da kısaltma olarak desteklenir ve aşağıdaki iki ifade de benzer şekilde eşdeğerdir:
[[A],[B]]
_[[A],[B]]
Kısaltma biçimi özellikle kısaltma ile each birlikte kullanışlıdır ve adlı _ tek bir parametrenin işlevini tanıtma yöntemidir (ayrıntılar için bkz . Basitleştirilmiş bildirimler). İki kısaltma birlikte yaygın yüksek sıralı işlevsel ifadeleri basitleştirir:
List.Select( {[a=1, b=1], [a=2, b=4]}, each [a] = [b])
// {[a=1, b=1]}
Yukarıdaki ifade, aşağıdaki daha şifreli görünen longhand ile eşdeğerdir:
List.Select( {[a=1, b=1], [a=2, b=4]}, (_) => _[a] = _[b])
// {[a=1, b=1]}
Alan erişimi, erişilen alanlar dışındaki alanların değerlendirilmesini zorlamaz. Örneğin:
[A=error "a", B=1, C=error "c"][B] // 1
[A=error "a", B=error "b"][B] // error "b"
Bir alan erişim işleci x[y], , x[y]?x[[y]]veya x[[y]]? değerlendirildiğinde aşağıdakiler kullanılır:
İfadenin
xdeğerlendirilmesi sırasında oluşan hatalar yayılır.Alan değerlendirilirken oluşan hatalar, alanıyla
yykalıcı olarak ilişkilendirilir ve sonra yayılır. Alanaygelecekte yapılacak tüm erişimler aynı hatayı oluşturur.İfade
xbir kayıt veya tablo değeri üretir ya da bir hata oluşur.Tanımlayıcı
yiçindexbulunmayan bir alanı adlandırıyorsa, isteğe bağlı işleç formu"Expression.Error"kullanılmadığı sürece neden koduyla...?bir hata oluşur ve bu durumda değernulldöndürülür.
alan erişimi işlemi sırasında tarafından x adlandırılan dışında hiçbir alan y değerlendirilmez.
Meta veri işleci
Bir değerin meta veri kaydı meta işlecideğiştirilir.
meta veri-ifadesi:
birli ifade
birli ifademetabirli ifade
Aşağıdaki örnek, işlecini kullanarak meta meta veri kaydıyla bir metin değeri oluşturur ve ardından kullanarak Value.Metadataelde edilen değerin meta veri kaydına erişir:
Value.Metadata( "Mozart" meta [ Rating = 5 ] )
// [Rating = 5 ]
Value.Metadata( "Mozart" meta [ Rating = 5 ] )[Rating]
// 5
Meta veri birleştirme işleci x meta yuygulanırken aşağıdakiler geçerlidir:
veya
xifadeleri değerlendirilirkenyoluşan hatalar yayılır.İfade
ybir kayıt olmalıdır veya neden koduyla"Expression.Error"ilgili bir hata oluşur.Sonuçta elde edilen meta veri kaydı ile
xbirleştirilen meta veri kaydıdıry. (Kayıt birleştirme semantiği için bkz. Kayıt birleştirme.)Elde edilen değer, meta verileri olmadan, yeni hesaplanan meta veri kaydının eklendiği ifadedeki
xdeğerdir.
Standart kitaplık işlevidir Value.RemoveMetadata ve Value.ReplaceMetadata bir değerdeki tüm meta verileri kaldırmak ve bir değerin meta verilerini değiştirmek için kullanılabilir (meta verileri mevcut meta verilerde birleştirmek yerine). Aşağıdaki ifadeler eşdeğerdir:
x meta y
Value.ReplaceMetadata(x, Value.Metadata(x) & y)
Value.RemoveMetadata(x) meta (Value.Metadata(x) & y)
Eşitlik İşleçleri
eşitlik işleci=, iki değerin eşit olup olmadığını belirlemek için kullanılır. Eşitsizlik işleci<>, iki değerin eşit olup olmadığını belirlemek için kullanılır.
eşitlik-ifade:
ilişkisel ifade
ilişkisel-ifade=eşitlik-ifadesi
ilişkisel-ifade<>eşitlik-ifadesi
Örneğin:
1 = 1 // true
1 = 2 // false
1 <> 1 // false
1 <> 2 // true
null = true // false
null = null // true
Meta veriler eşitlik veya eşitsizlik karşılaştırmasının bir parçası değildir. Örneğin:
(1 meta [ a = 1 ]) = (1 meta [ a = 2 ]) // true
(1 meta [ a = 1 ]) = 1 // true
Eşitlik işleçleri x = y ve x <> yuygulanırken aşağıdakiler geçerlidir:
veya
xifadeleri değerlendirilirkenyoluşan hatalar yayılır.işleci
=, değerlerintrueeşit olup olmadığını vefalseaksi takdirde sonucunu verir.işleci
<>, değerlerinfalseeşit olup olmadığını vetrueaksi takdirde sonucunu verir.Meta veri kayıtları karşılaştırmaya dahil değildir.
ve
xifadeleri değerlendirilerekyüretilen değerler aynı değer türü değilse, değerler eşit değildir.ve
xifadesi değerlendirilerekyüretilen değerler aynı türde bir değerse, aşağıda açıklandığı gibi eşit olup olmadığını belirlemek için belirli kurallar vardır.Aşağıdakiler her zaman doğrudur:
(x = y) = not (x <> y)
Eşitlik işleçleri aşağıdaki türler için tanımlanır:
-
nullDeğer yalnızca kendisine eşittir.
null = null // true
null = true // false
null = false // false
- ve mantıksal değerleri
truefalseyalnızca kendilerine eşittir. Örneğin:
true = true // true
false = false // true
true = false // false
true = 1 // false
Sayılar belirtilen duyarlık kullanılarak karşılaştırılır:
Sayılardan biri ise
#nan, sayılar aynı değildir.Sayılardan hiçbiri olmadığında
#nan, sayılar sayısal değerin bit tabanlı karşılaştırması kullanılarak karşılaştırılır.#nankendisine eşit olmayan tek değerdir.Örneğin:
1 = 1, // true
1.0 = 1 // true
2 = 1 // false
#nan = #nan // false
#nan <> #nan // true
İki süre, aynı sayıda 100 nanosaniyelik keneleri temsil ederse eşittir.
Parçalarının büyüklükleri (saat, dakika, saniye) eşitse iki kez eşittir.
Parçalarının büyüklükleri (yıl, ay, gün) eşitse iki tarih eşittir.
Parçalarının büyüklükleri (yıl, ay, gün, saat, dakika, saniye) eşitse iki tarih saati eşittir.
karşılık gelen UTC tarih saatlerinin eşit olduğu iki tarih saat dilimi eşittir. İlgili UTC tarih saatine ulaşmak için, saat/dakika uzaklığı datetimezone'un datetime bileşeninden çıkarılır.
İki metin değeri, sıralı, büyük/küçük harfe duyarlı, kültüre duyarsız bir karşılaştırma kullanıyorsa eşit olur ve karşılık gelen konumlarda aynı uzunlukta ve eşit karakterlere sahiptir.
Aşağıdakilerin tümü doğruysa iki liste değeri eşittir:
Her iki liste de aynı sayıda öğe içerir.
Listelerdeki konum olarak karşılık gelen her öğenin değerleri eşittir. Bu, yalnızca listelerin eşit öğe içermesi gerekmediği, öğelerin aynı sırada olması gerektiği anlamına gelir.
Örneğin:
{1, 2} = {1, 2} // true {2, 1} = {1, 2} // false {1, 2, 3} = {1, 2} // false
Aşağıdakilerin tümü doğruysa iki kayıt eşittir:
Alan sayısı aynıdır.
Bir kaydın her alan adı diğer kayıtta da bulunur.
Bir kaydın her alanının değeri, diğer kayıttaki benzer adlı alana eşittir.
Örneğin:
[ A = 1, B = 2 ] = [ A = 1, B = 2 ] // true [ B = 2, A = 1 ] = [ A = 1, B = 2 ] // true [ A = 1, B = 2, C = 3 ] = [ A = 1, B = 2 ] // false [ A = 1 ] = [ A = 1, B = 2 ] // false
Aşağıdakilerin tümü doğruysa iki tablo eşittir:
Sütun sayısı aynıdır.
Bir tablodaki her sütun adı, diğer tabloda da bulunur.
Satır sayısı aynıdır.
Her satır, karşılık gelen hücrelerde eşit değerlere sahiptir.
Örneğin:
#table({"A","B"},{{1,2}}) = #table({"A","B"},{{1,2}}) // true #table({"A","B"},{{1,2}}) = #table({"X","Y"},{{1,2}}) // false #table({"A","B"},{{1,2}}) = #table({"B","A"},{{2,1}}) // true
İşlev değeri kendisine eşittir, ancak başka bir işlev değerine eşit olabilir veya olmayabilir. İki işlev değeri eşit olarak kabul edilirse, çağrıldıklarında aynı şekilde davranırlar.
Verilen iki işlev değeri her zaman aynı eşitlik ilişkisine sahip olur.
Tür değeri kendisine eşittir, ancak başka bir tür değerine eşit olabilir veya olmayabilir. İki tür değeri eşit olarak kabul edilirse, uyumluluk için sorgulandığında aynı şekilde davranırlar.
Verilen iki tür değeri her zaman aynı eşitlik ilişkisine sahip olur.
İlişkisel işleçler
, , ve işleçleri ilişkisel işleçler<.><=>=
ilişkisel ifade:
additive-expression
ekleme-ifadesi<ilişkisel-ifade
ekleme-ifadesi>ilişkisel-ifade
ekleme-ifadesi<=ilişkisel-ifade
ekleme-ifadesi>=ilişkisel-ifade
Bu işleçler, aşağıdaki tabloda gösterildiği gibi iki değer arasındaki göreli sıralama ilişkisini belirlemek için kullanılır:
| İşlem | Sonuç |
|---|---|
x < y |
truedeğerinden xküçüksey, false değilse |
x > y |
truedeğerinden xbüyüksey, false değilse |
x <= y |
true değerinden küçük veya buna eşitse xy, false aksi takdirde |
x >= y |
true değerinden büyük veya buna eşitse xy, false aksi takdirde |
Örneğin:
0 <= 1 // true
null < 1 // null
null <= null // null
"ab" < "abc" // true
#nan >= #nan // false
#nan <= #nan // false
İlişkisel işleçleri içeren bir ifade değerlendirilirken aşağıdakiler geçerlidir:
veya
xişlenen ifadeleri değerlendirilirkenyoluşan hatalar yayılır.hem hem
xdeyifadeleri değerlendirilerek üretilen değerler ikili, tarih, tarih saat, tarih saat dilimi, süre, mantıksal, sayı, null, metin veya saat değeri olmalıdır. Aksi takdirde, neden koduyla"Expression.Error"bir hata oluşur.her iki işlenen de aynı türde veya
nullolmalıdır. Aksi takdirde, neden koduyla"Expression.Error"bir hata oluşur.İşlenenlerden
nullbiri veya her ikisi de ise, sonuç değerdirnull.İki ikili dosya bayt bayt karşılaştırılır.
İki tarih, yıl parçaları ve eşitse ay parçaları ve eşitse gün parçaları karşılaştırılarak karşılaştırılır.
İki tarih saati, yıl parçalarının ve eşitse ay parçalarının ve eşitse gün parçalarının ve eşitse saat parçalarının ve eşitse dakika parçalarının ve eşitse ikinci parçalarının karşılaştırması ile karşılaştırılır.
İki tarih saat dilimi, saat/dakika uzaklıkları çıkarılarak ve sonra tarih saat bileşenleri karşılaştırılarak UTC olarak normalleştirilerek karşılaştırılır.
İki süre, temsil ettikleri toplam 100 nanosaniyelik kene sayısına göre karşılaştırılır.
değerinden
truebüyükfalseolarak kabul edilen iki mantıksal karşılaştırılır.ve iki sayı
xyIEEE 754 standardının kurallarına göre karşılaştırılır:İşlenenlerden biri ise
#nan, sonuçfalsetüm ilişkisel işleçler içindir.İşlenenlerden hiçbiri olmadığında
#nan, işleçler iki kayan nokta işleneninin değerlerini, en küçük ve en büyük pozitif sonlu değerlerin temsil edilebilen en küçük ve en büyük pozitif sonlu değerler olduğu sıralamayla-∞ < -max < ... < -min < -0.0 = +0.0 < +min < ... < +max < +∞karşılaştırır. -∞ ve +∞ için M adları ve-#infinityşeklindedir#infinity.Bu sıralamanın önemli etkileri şunlardır:
Negatif ve pozitif sıfırlar eşit kabul edilir.
Bir
-#infinitydeğer diğer tüm sayı değerlerinden daha az olarak kabul edilir, ancak başka bir-#infinitydeğere eşittir.Bir
#infinitydeğer diğer tüm sayı değerlerinden büyük olarak kabul edilir, ancak başka bir#infinitydeğere eşittir.
İki metin, karakter karakter sıralı, büyük/küçük harfe duyarlı, kültüre duyarsız karşılaştırma kullanılarak karşılaştırılır.
İki kez, saat parçaları ve eşitse dakika parçaları ve eşitse ikinci parçaları karşılaştırılarak karşılaştırılır.
Koşullu mantıksal işleçler
and ve or işleçleri koşullu mantıksal işleçler olarak adlandırılır.
mantıksal veya ifade:
mantıksal-ve-ifade
mantıksal-ve-ifadeormantıksal-veya-ifadesi
mantıksal ve ifade:
is-ifadesi
is-expressionandlogical-and-expression
İşleç, or işlenenlerinden en az biri olduğunda truedöndürürtrue. Sağ işlenen, yalnızca sol işlenen değilse truedeğerlendirilir.
İşleç, and işlenenlerinden en az biri olduğunda falsedöndürürfalse. Sağ işlenen, yalnızca sol işlenen değilse falsedeğerlendirilir.
dikey eksende or sol işlenen ifadesinin değerlendirilmesi ve yatay eksende sağ işlenen ifadesinin değerlendirilmesi sonucuyla, ve and işleçleri için doğruluk tabloları aşağıda gösterilmiştir.
and |
true |
false |
null |
error |
|---|---|---|---|---|
true |
true |
false |
null |
error |
false |
false |
false |
false |
false |
null |
null |
false |
null |
error |
error |
error |
error |
error |
error |
or |
true |
false |
null |
error |
|---|---|---|---|---|
or |
true |
false |
null |
error |
true |
true |
true |
true |
true |
false |
true |
false |
null |
error |
null |
true |
null |
null |
error |
error |
error |
error |
error |
error |
Koşullu mantıksal işleçler içeren bir ifade değerlendirilirken aşağıdakiler geçerlidir:
veya
xifadeleri değerlendirilirkenyoluşan hatalar yayılır.Koşullu mantıksal işleçler ve
logicaltürlerinullüzerinde tanımlanır. İşlenen değerler bu türlerden değilse, neden koduyla"Expression.Error"ilgili bir hata oluşur.Sonuç mantıksal bir değerdir.
veya
xifadesindey, ifadeyyalnızca ve olarak değerlendirilmezsexdeğerlendirilirtrue.ve
xifadesindey, ifadeyyalnızca ve olarak değerlendirilmezsexdeğerlendirilirfalse.
Son iki özellik, koşullu mantıksal işleçlere "koşullu" nitelemelerini verir; özellikleri "kısa devre" olarak da adlandırılır. Bu özellikler, sıkıştırılmış korumalı koşulları yazmak için kullanışlıdır. Örneğin, aşağıdaki ifadeler eşdeğerdir:
d <> 0 and n/d > 1 if d <> 0 then n/d > 1 else false
Aritmetik İşleçler
+, -ve */ işleçleri aritmetik işleçlerdir.
additive-expression:
çarpımlı ifade
katkısal-ifade+çarpımsal-ifade
katkısal-ifade-çarpımsal-ifade
çarpımlı ifade:
meta veri- ifade
multiplicative-expression*metadata-expression
multiplicative-expression/metadata-expression
Duyarlık
M'deki sayılar, çeşitli kaynaklardan gelen sayılar hakkında mümkün olduğunca fazla bilgi tutmak için çeşitli gösterimler kullanılarak depolanır. Sayılar, kendilerine uygulanan işleçler tarafından gerektiğinde yalnızca bir gösterimden diğerine dönüştürülür. M'de iki duyarlık desteklenir:
| Duyarlık | Semantik |
|---|---|
Precision.Decimal |
±1,0 x 10-28 ile ±7,9 x 1028 ve 28-29 arasında anlamlı basamak aralığına sahip 128 bit ondalık gösterim. |
Precision.Double |
Mantis ve üs kullanılarak bilimsel temsil; 64 bit ikili çift duyarlıklı IEEE 754 aritmetik standart IEEE 754-2008 ile uyumludur. |
Aritmetik işlemler bir duyarlık seçilerek, her iki işlenen de bu duyarlık (gerekirse) değerine dönüştürülerek, ardından gerçek işlem gerçekleştirilerek ve son olarak seçilen duyarlıkta bir sayı döndürülerek gerçekleştirilir.
Yerleşik aritmetik işleçler (+, -, *, /) Çift Duyarlık kullanır. Standart kitaplık işlevleri (Value.Add, Value.Subtract, Value.Multiply, Value.Divide) belirli bir duyarlık modeli kullanılarak bu işlemleri istemek için kullanılabilir.
Sayısal taşma mümkün değildir:
#infinityveya-#infinitytemsil edilemeyecek kadar büyük büyüklüklerin değerlerini temsil eder.Sayısal alt akış mümkün değildir:
0ve-0temsil edilemeyecek kadar küçük olan büyüklüklerin değerlerini temsil eder.IEEE 754 özel değeri
#nan(NaN—Sayı Değil), sıfırdan sıfıra bölme gibi aritmetik olarak geçersiz durumları kapsamak için kullanılır.Ondalıktan Çift duyarlık'a dönüştürme, ondalık sayıları en yakın eşdeğer çift değere yuvarlayarak gerçekleştirilir.
Çiftten Ondalık duyarlık değerine dönüştürme, çift sayıları en yakın eşdeğer ondalık değere yuvarlayarak ve gerekirse veya
#infinitydeğerlerine-#infinitytaşarak gerçekleştirilir.
Toplama işleci
Toplama işlecinin (x + y) yorumlanması, aşağıdaki gibi değerlendirilen x ve y ifadelerinin değer türüne bağlıdır:
| x | y | Sonuç | Yorumlama |
|---|---|---|---|
type number |
type number |
type number |
Sayısal toplam |
type number |
null |
null |
|
null |
type number |
null |
|
type duration |
type duration |
type duration |
Büyüklüklerin sayısal toplamı |
type duration |
null |
null |
|
null |
type duration |
null |
|
type
datetime |
type duration |
type
datetime |
Süreye göre tarih saat uzaklığı |
type duration |
type
datetime |
type
datetime |
|
type
datetime |
null |
null |
|
null |
type
datetime |
null |
Tabloda, typedatetime herhangi bir type date, type datetime, type datetimezoneveya type timeanlamına gelir. Tarih saat türünde bir süre ve değer eklerken, sonuçta elde edilen değer aynı türde olur.
Tabloda listelenenlerden farklı değer birleşimleri için neden koduyla "Expression.Error" ilgili bir hata oluşur. Her birleşim aşağıdaki bölümlerde ele alınmıştır.
her iki işlenen de değerlendirilirken oluşan hatalar yayılır.
Sayısal toplam
İki sayının toplamı toplama işleci kullanılarak hesaplanır ve bir sayı oluşturulur.
Örneğin:
1 + 1 // 2
#nan + #infinity // #nan
Sayılar üzerindeki toplama işleci + Çift Duyarlık kullanır; standart kitaplık işlevi Value.Add Ondalık Duyarlığı belirtmek için kullanılabilir. Sayıların toplamı hesaplanırken aşağıdakiler geçerlidir:
Çift Duyarlık'taki toplam, 64 bit ikili çift yönlü IEEE 754 aritmetik IEEE 754-2008 kurallarına göre hesaplanır. Aşağıdaki tabloda sıfır olmayan sonlu değerlerin, sıfırların, sonsuzların ve NaN'lerin olası tüm birleşimlerinin sonuçları listelenmiştir. tablosunda
xysıfır olmayan sonlu değerlerdir vezsonucudurx + y.xVe aynı büyüklüğe ancak karşıt işaretlere sahipsey,zpozitif sıfırdır. Hedef türünde temsil edilemeyecek kadar büyüksex + y,zile aynı işaretix + yolan bir sonsuzdur.+ y +0 0- +∞ -∞ NaN x z x x +∞ -∞ NaN +0 y +0 +0 +∞ -∞ NaN -0 y +0 0- +∞ -∞ NaN +∞ +∞ +∞ +∞ +∞ NaN NaN -∞ -∞ -∞ -∞ NaN -∞ NaN Nan NaN NaN NaN NaN NaN NaN Ondalık Duyarlık içindeki toplam, duyarlık kaybı olmadan hesaplanır. Sonucun ölçeği, iki işlenenin ölçeklerinin büyük olmasıdır.
Sürelerin toplamı
İki sürenin toplamı, sürelerle temsil edilen 100nanosaniyelik değer sayısının toplamını temsil eden süredir. Örneğin:
#duration(2,1,0,15.1) + #duration(0,1,30,45.3)
// #duration(2, 2, 31, 0.4)
Süreye göre tarih saat uzaklığı
Doğrusal zaman çizelgesindeki uzaklığı tam olarak 'nin xbüyüklüğü olan yeni y hesaplamak için kullanarak x + y bir tarih saatx ve bir süre y eklenebilir. Burada, datetime herhangi bir Date, DateTime, DateTimeZoneveya Time için anlamına gelir ve null olmayan bir sonuç aynı türde olur. Süreye göre tarih saat uzaklığı aşağıdaki gibi hesaplanabilir:
Tarih saatlerinin dönem değerinden sonraki günleri belirtilirse, aşağıdaki bilgi öğeleriyle yeni bir datetime oluştur:
y'nin büyüklüğünü 24 saatlik bir dönemdeki 100 nanosaniyelik değer sayısına bölmeye, sonucun ondalık kısmını kesmeye ve bu değeri dönemden bu yana x günlerine eklemeye eşdeğer olan yeni bir gün hesaplayın.
Gece yarısından bu yana y'nin büyüklüğünü gece yarısından bu yana x'in kenelerine eklemeye eşdeğer yeni bir değer hesaplama, 24 saatlik bir dönemde 100 nanosaniyelik kene sayısını modüle etme. x gece yarısından bu yana değer belirtmezse 0 değeri varsayılır.
Utc'den dakika uzaklığı için x değerini değiştirmeden kopyalayın.
Tarih saatlerinin dönem değerinden bu yana geçen günleri belirtilmemişse, aşağıdaki bilgi öğelerinin belirtildiği yeni bir datetime oluştur:
Gece yarısından bu yana y'nin büyüklüğünü gece yarısından bu yana x'in kenelerine eklemeye eşdeğer yeni bir değer hesaplama, 24 saatlik bir dönemde 100 nanosaniyelik kene sayısını modüle etme. x gece yarısından bu yana değer belirtmezse 0 değeri varsayılır.
X'in dönem ve dakika uzaklığından sonraki gün değerlerini UTC'den değiştirmeden kopyalayın.
Aşağıdaki örneklerde, tarih saat döneminin dönem sonundan bu yana geçen günleri belirttiğinde mutlak zamansal toplamın hesaplanması gösterilmektedir:
#date(2010,05,20) + #duration(0,8,0,0)
//#datetime( 2010, 5, 20, 8, 0, 0 )
//2010-05-20T08:00:00
#date(2010,01,31) + #duration(30,08,0,0)
//#datetime(2010, 3, 2, 8, 0, 0)
//2010-03-02T08:00:00
#datetime(2010,05,20,12,00,00,-08) + #duration(0,04,30,00)
//#datetime(2010, 5, 20, 16, 30, 0, -8, 0)
//2010-05-20T16:30:00-08:00
#datetime(2010,10,10,0,0,0,0) + #duration(1,0,0,0)
//#datetime(2010, 10, 11, 0, 0, 0, 0, 0)
//2010-10-11T00:00:00+00:00
Aşağıdaki örnekte, belirli bir süre için tarih saat uzaklığını süreye göre hesaplama gösterilmektedir:
#time(8,0,0) + #duration(30,5,0,0)
//#time(13, 0, 0)
//13:00:00
Çıkarma işleci
Çıkarma işlecinin (x - y) yorumlanması, değerlendirilen ifadelerin x ve ydeğerinin türüne aşağıdaki gibi bağlıdır:
| x | Y | Sonuç | Yorumlama |
|---|---|---|---|
type number |
type number |
type number |
Sayısal fark |
type number |
null |
null |
|
null |
type number |
null |
|
type duration |
type duration |
type duration |
Büyüklüklerin sayısal farkı |
type duration |
null |
null |
|
null |
type duration |
null |
|
type
datetime |
type
datetime |
type duration |
Tarih saatleri arasındaki süre |
type
datetime |
type duration |
type
datetime |
Devredilen süreye göre tarih saat uzaklığı |
type
datetime |
null |
null |
|
null |
type
datetime |
null |
Tabloda, typedatetime herhangi bir type date, type datetime, type datetimezoneveya type timeanlamına gelir. Datetime türünde bir değerden süre çıkarıldığında, sonuçta elde edilen değer aynı türde olur.
Tabloda listelenenlerden farklı değer birleşimleri için neden koduyla "Expression.Error" ilgili bir hata oluşur. Her birleşim aşağıdaki bölümlerde ele alınmıştır.
her iki işlenen de değerlendirilirken oluşan hatalar yayılır.
Sayısal fark
İki sayı arasındaki fark, çıkarma işleci kullanılarak hesaplanır ve bir sayı oluşturulur. Örneğin:
1 - 1 // 0
#nan - #infinity // #nan
Sayılar üzerindeki çıkarma işleci - Çift Duyarlık kullanır; standart kitaplık işlevi Value.Subtract Ondalık Duyarlığı belirtmek için kullanılabilir. Sayı farkı hesaplanırken aşağıdakiler geçerlidir:
Çift Duyarlık farkı, 64 bit ikili çift duyarlıklı IEEE 754 aritmetik IEEE 754-2008 kurallarına göre hesaplanır. Aşağıdaki tabloda sıfır olmayan sonlu değerlerin, sıfırların, sonsuzların ve NaN'lerin olası tüm birleşimlerinin sonuçları listelenmiştir. tablosunda
xysıfır olmayan sonlu değerlerdir vezsonucudurx - y. vexeşitsey,zpozitif sıfırdır. Hedef türünde temsil edilemeyecek kadar büyüksex - y,zile aynı işaretix - yolan bir sonsuzdur.- y +0 0- +∞ -∞ NaN x z x x -∞ +∞ NaN +0 -y +0 +0 -∞ +∞ NaN -0 -y 0- +0 -∞ +∞ NaN +∞ +∞ +∞ +∞ NaN +∞ NaN -∞ -∞ -∞ -∞ -∞ NaN NaN Nan NaN NaN NaN NaN NaN NaN Ondalık Duyarlık farkı, duyarlık kaybı olmadan hesaplanır. Sonucun ölçeği, iki işlenenin ölçeklerinin büyük olmasıdır.
Süre farkı
İki sürenin farkı, her bir süre tarafından temsil edilen 100 nanosaniyelik değer sayısı arasındaki farkı temsil eden süredir. Örneğin:
#duration(1,2,30,0) - #duration(0,0,0,30.45)
// #duration(1, 2, 29, 29.55)
Devredilen süreye göre tarih saat uzaklığı
ve süre x çıkarılabilir. Burada datetime herhangi bir date, datetime, datetimezoneveya timeanlamına gelir. Sonuçta elde edilen tarih saat, işaretinin karşısındaki yönde, tam olarak öğesinin xbüyüklüğü olan doğrusal bir zaman çizelgesinden uzaklığa yysahiptir. Pozitif süreler çıkarıldığında, değerine göre xgeriye dönük sonuçlar elde edilirken, negatif değerler çıkarıldığında ise zaman içinde ileriye dönük sonuçlar elde edilir.
#date(2010,05,20) - #duration(00,08,00,00)
//#datetime(2010, 5, 19, 16, 0, 0)
//2010-05-19T16:00:00
#date(2010,01,31) - #duration( 30,08,00,00)
//#datetime(2009, 12, 31, 16, 0, 0)
//2009-12-31T16:00:00
İki tarih saat arasındaki süre
İki tarih saatt ve u bunlar arasındaki süreyi hesaplamak için kullanılarak t - u çıkarılabilir. Burada datetime herhangi bir date, datetime, datetimezoneveya timeanlamına gelir. 'den çıkarılarak u üretilen süre, öğesine teklendiğinde verilmelidirt.u
#date(2010,01,31) - #date(2010,01,15)
// #duration(16,00,00,00)
// 16.00:00:00
#date(2010,01,15)- #date(2010,01,31)
// #duration(-16,00,00,00)
// -16.00:00:00
#datetime(2010,05,20,16,06,00,-08,00) -
#datetime(2008,12,15,04,19,19,03,00)
// #duration(521,22,46,41)
// 521.22:46:41
Negatif süreyle sonuçlandığında t - u çıkarmau > t:
#time(01,30,00) - #time(08,00,00)
// #duration(0, -6, -30, 0)
kullanarak iki t - u çıkarıldığında aşağıdakiler tutar:
- u + (t - u) = t
Çarpma işleci
Çarpma işlecinin (x * y) yorumu, aşağıdaki gibi değerlendirilen x ve y ifadelerinin türüne bağlıdır:
| X | Y | Sonuç | Yorumlama |
|---|---|---|---|
type number |
type number |
type number |
Sayısal ürün |
type number |
null |
null |
|
null |
type number |
null |
|
type duration |
type number |
type duration |
Sürenin katları |
type number |
type duration |
type duration |
Sürenin katları |
type duration |
null |
null |
|
null |
type duration |
null |
Tabloda listelenenlerden farklı değer birleşimleri için neden koduyla "Expression.Error" ilgili bir hata oluşur. Her birleşim aşağıdaki bölümlerde ele alınmıştır.
her iki işlenen de değerlendirilirken oluşan hatalar yayılır.
Sayısal ürün
İki sayının ürünü çarpma işleci kullanılarak hesaplanır ve bir sayı oluşturulur. Örneğin:
2 * 4 // 8
6 * null // null
#nan * #infinity // #nan
Sayılar üzerindeki çarpma işleci * Çift Duyarlık kullanır; standart kitaplık işlevi Value.Multiply Ondalık Duyarlığı belirtmek için kullanılabilir. Sayılardan oluşan bir ürün hesaplanırken aşağıdakiler geçerlidir:
Çift Duyarlıklı ürün, 64 bit ikili çift duyarlıklı IEEE 754 aritmetik IEEE 754-2008 kurallarına göre hesaplanır. Aşağıdaki tabloda sıfır olmayan sonlu değerlerin, sıfırların, sonsuzların ve NaN'lerin olası tüm birleşimlerinin sonuçları listelenmiştir. tablosunda
xveypozitif sonlu değerlerdir.z, sonucunun sonucudurx * y. Sonuç hedef türü için çok büyükse sonsuzdurz. Sonuç hedef türüziçin çok küçükse sıfırdır.* +y -y +0 0- +∞ -∞ NaN +x +z -z +0 0- +∞ -∞ NaN -x -z +z 0- +0 -∞ +∞ NaN +0 +0 0- +0 0- NaN NaN NaN -0 0- +0 0- +0 NaN NaN NaN +∞ +∞ -∞ NaN NaN +∞ -∞ NaN -∞ -∞ +∞ NaN NaN -∞ +∞ NaN Nan NaN NaN NaN NaN NaN NaN NaN Ondalık Duyarlık'taki ürün duyarlık kaybı olmadan hesaplanır. Sonucun ölçeği, iki işlenenin ölçeklerinin büyük olmasıdır.
Süre katları
Bir sürenin ve sayının çarpımı, işlenen sayının süre işlenen sayısıyla temsil edilen 100nanosaniyelik onay işareti sayısını temsil eden süredir. Örneğin:
#duration(2,1,0,15.1) * 2
// #duration(4, 2, 0, 30.2)
Bölme işleci
Bölme işlecinin (x / y) yorumlanması, değerlendirilen ifadelerin x ve ydeğerlerinin türüne aşağıdaki gibi bağlıdır:
| X | Y | Sonuç | Yorumlama |
|---|---|---|---|
type number |
type number |
type number |
Sayısal bölüm |
type number |
null |
null |
|
null |
type number |
null |
|
type duration |
type number |
type duration |
Sürenin kesri |
type duration |
type duration |
type number |
Sürelerin sayısal bölümü |
type duration |
null |
null |
|
null |
type duration |
null |
Tabloda listelenenlerden farklı değer birleşimleri için neden koduyla "Expression.Error" ilgili bir hata oluşur. Her birleşim aşağıdaki bölümlerde ele alınmıştır.
her iki işlenen de değerlendirilirken oluşan hatalar yayılır.
Sayısal bölüm
İki sayının bölümü, bölme işleci kullanılarak hesaplanır ve bir sayı oluşturulur. Örneğin:
8 / 2 // 4
8 / 0 // #infinity
0 / 0 // #nan
0 / null // null
#nan / #infinity // #nan
Sayılar üzerindeki bölme işleci / Çift Duyarlık kullanır; standart kitaplık işlevi Value.Divide Ondalık Duyarlığı belirtmek için kullanılabilir. Sayıların bir kısmı hesaplanırken aşağıdakiler geçerlidir:
Çift Duyarlık içindeki bölüm, 64 bit ikili çift duyarlıklı IEEE 754 aritmetik IEEE 754-2008 kurallarına göre hesaplanır. Aşağıdaki tabloda sıfır olmayan sonlu değerlerin, sıfırların, sonsuzların ve NaN'lerin olası tüm birleşimlerinin sonuçları listelenmiştir. tablosunda
xveypozitif sonlu değerlerdir.z, sonucunun sonucudurx / y. Sonuç hedef türü için çok büyükse sonsuzdurz. Sonuç hedef türüziçin çok küçükse sıfırdır./ +y -y +0 0- +∞ -∞ NaN +x +z -z +∞ -∞ +0 0- NaN -x -z +z -∞ +∞ 0- +0 NaN +0 +0 0- NaN NaN +0 0- NaN -0 0- +0 NaN NaN 0- +0 NaN +∞ +∞ -∞ +∞ -∞ NaN NaN NaN -∞ -∞ +∞ -∞ +∞ NaN NaN NaN Nan NaN NaN NaN NaN NaN NaN NaN Ondalık Duyarlık içindeki toplam, duyarlık kaybı olmadan hesaplanır. Sonucun ölçeği, iki işlenenin ölçeklerinin büyük olmasıdır.
Sürelerin bölümü
İki sürenin bölümü, sürelerle temsil edilen 100nanosaniyelik değer sayısının bölümünü temsil eden sayıdır. Örneğin:
#duration(2,0,0,0) / #duration(0,1,30,0)
// 32
Ölçeklendirilen süreler
Bir sürenin x ve sayının bölümü, süre ve sayının y temsil ettiği 100 nanosaniyelik onay işareti sayısının çekirdeğini xtemsil eden sürediry. Örneğin:
#duration(2,0,0,0) / 32
// #duration(0,1,30,0)
Yapı Bileşimi
Birleşim işleci (x & y) aşağıdaki değer türleri üzerinde tanımlanır:
| X | Y | Sonuç | Yorumlama |
|---|---|---|---|
type text |
type text |
type text |
Bitiştirme |
type text |
null |
null |
|
null |
type text |
null |
|
type date |
type time |
type datetime |
Adres Mektup Birleştirme |
type date |
null |
null |
|
null |
type time |
null |
|
type list |
type list |
type list |
Bitiştirme |
type record |
type record |
type record |
Adres Mektup Birleştirme |
type table |
type table |
type table |
Bitiştirme |
Bitiştirme
kullanılarak iki metin, iki liste veya iki tablo değeri birleştirilebilir x & y.
Aşağıdaki örnekte metin değerlerinin birleştirilmesi gösterilmektedir:
"AB" & "CDE" // "ABCDE"
Aşağıdaki örnek, birleştirme listelerini gösterir:
{1, 2} & {3} // {1, 2, 3}
kullanarak x & yiki değer birleştirirken aşağıdakiler tutar:
veya
xifadeleri değerlendirilirkenyoluşan hatalar yayılır.Bir öğe
xveyaybir hata içeriyorsa hata yayılmaz.İki metin değerini birleştirmenin sonucu, x değerini hemen ve ardından y değerini içeren bir metin değeridir. İşlenenlerden biri null, diğeri metin değeriyse sonuç null olur.
İki listenin birleştirilmesinin sonucu, öğesinin tüm öğelerini
xve ardından öğelerini içeren bir listediry.İki tabloyu birleştirmenin sonucu, iki işlenen tablonun sütunlarının birleşimini içeren bir tablodur. sütun sıralaması
xkorunur ve ardından yalnızca içindeygörünen sütunlar ve göreli sıralamaları korunur. Yalnızca işlenenlerden birinde görünen sütunlar için,nulldiğer işlenenin hücre değerlerini doldurmak için kullanılır.
Adres Mektup Birleştirme
Kayıt birleştirme
hem hem de x & yxalanlarından alanlar içeren bir kayıt üreten iki kayıt kullanılarak ybirleştirilebilir.
Aşağıdaki örneklerde kayıtları birleştirme gösterilmektedir:
[ x = 1 ] & [ y = 2 ] // [ x = 1, y = 2 ]
[ x = 1, y = 2 ] & [ x = 3, z = 4 ] // [ x = 3, y = 2, z = 4 ]
kullanarak x + yiki kayıt birleştirildiğinde aşağıdakiler yer alıyor:
veya
xifadeleri değerlendirilirkenyoluşan hatalar yayılır.Hem hem
xdeyiçinde bir alan görünüyorsa, içindeki değerykullanılır.Sonuçta elde edilen kayıttaki alanların sırası, içinde yer alan ve içinde yer almayan
xalanlarınyiçindexgöründükleri sırayla olmasıdıry.Kayıtların birleştirilmesi değerlerin değerlendirilmesine neden olmaz.
Bir alan hata içerdiği için hata oluşmaz.
Sonuç bir kayıttır.
Tarih-saat birleştirme
Bir tarih x kullanılarak ybir saatle x & y birleştirilebilir ve hem hem de xyparçalarını birleştiren bir tarih saat oluşturulur.
Aşağıdaki örnekte tarih ve saat birleştirme gösterilmektedir:
#date(2013,02,26) & #time(09,17,00)
// #datetime(2013,02,26,09,17,00)
kullanarak x + yiki kayıt birleştirildiğinde aşağıdakiler yer alıyor:
veya
xifadeleri değerlendirilirkenyoluşan hatalar yayılır.Sonuç bir tarih saattir.
Birli işleçler
+, -ve not işleçleri birli işleçlerdir.
birli ifade:
type-expression
+
birli ifade
-
birli ifade
not
birli ifade
Tekli artı işleci
Birli artı işleci (+x) aşağıdaki değer türleri için tanımlanır:
| X | Sonuç | Yorumlama |
|---|---|---|
type number |
type number |
Birli artı |
type duration |
type duration |
Birli artı |
null |
'null |
Diğer değerler için neden koduyla "Expression.Error" ilgili bir hata oluşur.
Birli artı işleci bir + sayı, tarih saat veya null değere işaret uygulanmasına izin verir. Sonuç aynı değerdir. Örneğin:
+ - 1 // -1
+ + 1 // 1
+ #nan // #nan
+ #duration(0,1,30,0) // #duration(0,1,30,0)
Birli artı işleci +xdeğerlendirilirken aşağıdakiler geçerli olur:
Değerlendirme
xsırasında oluşan hatalar yayılır.Değerlendirmenin
xsonucu bir sayı değeri değilse, neden koduyla"Expression.Error"bir hata oluşur.
Birli eksi işleci
Birli eksi işleci (-x), aşağıdaki değer türleri için tanımlanır:
| X | Sonuç | Yorumlama |
|---|---|---|
type number |
type number |
Olumsuzlama |
type duration |
type duration |
Olumsuzlama |
null |
null |
Diğer değerler için neden koduyla "Expression.Error" ilgili bir hata oluşur.
Birli eksi işleci, bir sayının veya sürenin işaretini değiştirmek için kullanılır. Örneğin:
- (1 + 1) // -2
- - 1 // 1
- - - 1 // -1
- #nan // #nan
- #infinity // -#infinity
- #duration(1,0,0,0) // #duration(-1,0,0,0)
- #duration(0,1,30,0) // #duration(0,-1,-30,0)
Birli eksi işleci -xdeğerlendirilirken aşağıdakiler geçerli olur:
Değerlendirme
xsırasında oluşan hatalar yayılır.İfade bir sayıysa sonuç, işareti değiştirilmiş ifadedeki
xsayı değeridir. Değer NaN ise sonuç da NaN olur.
Mantıksal olumsuzlama işleci
Mantıksal olumsuzlama işleci (not), aşağıdaki değer türleri için tanımlanır:
| X | Sonuç | Yorumlama |
|---|---|---|
type logical |
type logical |
Olumsuzlama |
null |
null |
Bu işleç, belirli bir mantıksal değer üzerinde mantıksal not işlemi hesaplar. Örneğin:
not true // false
not false // true
not (true and true) // false
Mantıksal olumsuzlama işleci not xdeğerlendirilirken aşağıdakiler tutar:
Değerlendirme
xsırasında oluşan hatalar yayılır.x ifadesi değerlendirilirken üretilen değer mantıksal bir değer olmalı veya neden koduyla
"Expression.Error"ilgili bir hata oluşturulmalıdır. değer isetrue, sonuç olurfalse. İşlenen isefalse, sonuç olurtrue.
Sonuç mantıksal bir değerdir.
Tür işleçleri
ve is işleçleri as tür işleçleri olarak bilinir.
Tür uyumluluğu işleci
Tür uyumluluk işleci x is y aşağıdaki değer türleri için tanımlanır:
| X | Y | Sonuç |
|---|---|---|
type any |
primitive-or-nullable-primitive-type | type logical |
ifadesix is y, belirtilen türü x ile yuyumluysa döndürür true ve uyumlu değilse döndürürfalse.
y ilkel bir tür veya null atanabilir bir ilkel tür olmalıdır.
is-ifadesi:
ifade olarak
is-expressionisprimitive-or-nullable-primitive-type
primitive-or-nullable-primitive-type:
nullable
ilkel türü seç
İşleç tarafından is desteklenen tür uyumluluğu, genel tür uyumluluğunun bir alt kümesidir ve aşağıdaki kurallar kullanılarak tanımlanır:
null ise
xtürü , türüanynullveya null atanabilir ilkel tür iseyuyumludur.xnull değilse, ilkel türüxileyaynıysa uyumludur.
ifadesi x is ydeğerlendirilirken aşağıdakiler geçerlidir:
- İfade
xdeğerlendirilirken oluşan bir hata yayılır.
Tür onaylama işleci
Tür onaylama işleci x as y aşağıdaki değer türleri için tanımlanır:
| X | Y | Sonuç |
|---|---|---|
type any |
primitive-or-nullable-primitive-type | type any |
ifadesix as y, işlecine göre değerin xy ile is uyumlu olduğunu onaylar. Uyumlu değilse bir hata oluşur.
y ilkel bir tür veya null atanabilir bir ilkel tür olmalıdır.
ifade olarak:
eşitlik-ifade
as-expressionasprimitive-or-nullable-primitive-type
primitive-or-nullable-primitive-type:
nullable
ilkel türü seç
İfade x as y aşağıdaki gibi değerlendirilir:
Bir tür uyumluluk denetimi
x is ygerçekleştirilir ve bu test başarılı olursa onay değişmeden dönerx.Uyumluluk denetimi başarısız olursa, neden koduyla
"Expression.Error"bir hata oluşur.
Örnekler:
1 as number // 1
"A" as number // error
null as nullable number // null
ifadesi x as ydeğerlendirilirken aşağıdakiler geçerlidir:
- İfade
xdeğerlendirilirken oluşan bir hata yayılır.
Birleşim işleci
Birleşim işleci ?? , null değilse sol işleneninin sonucunu döndürür, aksi takdirde sağ işleneninin sonucunu döndürür. Sağ işlenen yalnızca sol işlenen null ise değerlendirilir.