İşleç davranışı
Bu bölüm, çeşitli M işleçlerinin davranışını tanımlar.
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 |
xmeta y |
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 | Not equal | |
Tür onayı |
xas y |
Uyumlu null atanabilir ilkel tür veya hata |
Tür uyumluluğu |
xis y |
Uyumlu null atanabilir ilkel tür olup olmadığını test edin |
Mantıksal VE |
xand y |
Kısa devre bağla |
Mantıksal VEYA |
xor y |
Kısa devreli ayrıştırma |
Coalesce |
x?? y |
Null birleşim işleci |
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 null
her 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.
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 işleçleri, verilerin liste ve kayıt değerlerinden ayıklanmasına olanak sağlar.
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
x
ve sayıy
için, konumundakix
listey
öğesi. Listenin ilk öğesi sıfır sıralı dizine sahip olarak kabul edilir. İstenen konum listede yoksa bir hata oluşur.Bir tablo
x
ve sayıy
için, konumundakix
tabloy
satı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
x
ve kayıty
için, karşılık gelen tablo-sütunx
adlarıyla eşleşen alan adlarına sahip alanlar için kaydıny
alan 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 x
da destekler. için y
birden ç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
x
değerlendirilmesi sırasında oluşan veyay
yayılan hatalar.İfade
x
bir liste veya tablo değeri oluşturur.İfade
y
bir sayı değeri veya tablo değeri üretirsex
bir kayıt değeri oluşturur.Sayı değeri üretirse
y
ve değeriy
negatifse, neden koduyla"Expression.Error"
bir hata oluşur.Bir sayı değeri üretirse ve değeri değerinden
y
büyük veya değerine eşitsey
, isteğe bağlı işleç formux
kullanılmadığı sürece neden koduyla"Expression.Error"
bir hata oluşur ve bu durumda değerx{y}?
döndürülür.null
Tablo değeri üretirse ve
x
bir kayıt değeri üretirsey
ve içindey
içinx
eş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ğernull
döndürülür.Bir tablo değeri üretir ve
x
bir kayıt değeri üretirsey
ve içindey
içinx
birden ç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ş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 x
yoksa 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 (, , y1
y2
tarafından seçilir...
) projeler. Seçili alan yoksa bir hata oluşur. işlecix[[y1],[y2],...]?
, kaydı , , y1
y2
tarafı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
x
değerlendirilmesi sırasında oluşan hatalar yayılır.Alan değerlendirilirken oluşan hatalar, alanıyla
y
y
kalıcı olarak ilişkilendirilir ve sonra yayılır. Alanay
gelecekte yapılacak tüm erişimler aynı hatayı oluşturur.İfade
x
bir kayıt veya tablo değeri üretir ya da bir hata oluşur.Tanımlayıcı
y
içindex
bulunmayan 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ğernull
dö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.
Bir değerin meta veri kaydı meta işlecix meta y
değiştirilir.
meta veri-ifadesi:
birli ifade
birli ifademeta
birli ifade
Aşağıdaki örnek, işlecini kullanarak meta
meta veri kaydıyla bir metin değeri oluşturur ve ardından kullanarak Value.Metadata
elde 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 y
uygulanırken aşağıdakiler geçerlidir:
veya
x
ifadeleri değerlendirilirkeny
oluşan hatalar yayılır.İfade
y
bir kayıt olmalıdır veya neden koduyla"Expression.Error"
ilgili bir hata oluşur.Sonuçta elde edilen meta veri kaydı ile
x
birleş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
x
değ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 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 <> y
uygulanırken aşağıdakiler geçerlidir:
veya
x
ifadeleri değerlendirilirkeny
oluşan hatalar yayılır.işleci
=
, değerlerintrue
eşit olup olmadığını vefalse
aksi takdirde sonucunu verir.işleci
<>
, değerlerinfalse
eşit olup olmadığını vetrue
aksi takdirde sonucunu verir.Meta veri kayıtları karşılaştırmaya dahil değildir.
ve
x
ifadeleri değerlendirilereky
üretilen değerler aynı değer türü değilse, değerler eşit değildir.ve
x
ifadesi 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:
-
null
Değer yalnızca kendisine eşittir.
null = null // true
null = true // false
null = false // false
- ve mantıksal değerleri
true
false
yalnı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.#nan
kendisine 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.
, , 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 |
true değerinden x küçüksey , false değilse |
x > y |
true değerinden x büyüksey , false değilse |
x <= y |
true değerinden küçük veya buna eşitse x y , false aksi takdirde |
x >= y |
true değerinden büyük veya buna eşitse x y , 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
x
işlenen ifadeleri değerlendirilirkeny
oluşan hatalar yayılır.hem hem
x
dey
ifadeleri 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
null
olmalıdır. Aksi takdirde, neden koduyla"Expression.Error"
bir hata oluşur.İşlenenlerden
null
biri 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
true
büyükfalse
olarak kabul edilen iki mantıksal karşılaştırılır.ve iki sayı
x
y
IEEE 754 standardının kurallarına göre karşılaştırılır:İşlenenlerden biri ise
#nan
, sonuçfalse
tü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
-#infinity
değer diğer tüm sayı değerlerinden daha az olarak kabul edilir, ancak başka bir-#infinity
değere eşittir.Bir
#infinity
değer diğer tüm sayı değerlerinden büyük olarak kabul edilir, ancak başka bir#infinity
değ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.
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-ifadeor
mantıksal-veya-ifadesi
mantıksal ve ifade:
is-ifadesi
is-expressionand
logical-and-expression
İşleç, or
işlenenlerinden en az biri olduğunda true
döndürürtrue
. Sağ işlenen, yalnızca sol işlenen değilse true
değerlendirilir.
İşleç, and
işlenenlerinden en az biri olduğunda false
döndürürfalse
. Sağ işlenen, yalnızca sol işlenen değilse false
değ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
x
ifadeleri değerlendirilirkeny
oluşan hatalar yayılır.Koşullu mantıksal işleçler ve
logical
tü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
x
ifadesindey
, ifadey
yalnızca ve olarak değerlendirilmezsex
değerlendirilirtrue
.ve
x
ifadesindey
, ifadey
yalnızca ve olarak değerlendirilmezsex
değ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
+
, -
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
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:
#infinity
veya-#infinity
temsil edilemeyecek kadar büyük büyüklüklerin değerlerini temsil eder.Sayısal alt akış mümkün değildir:
0
ve-0
temsil 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
#infinity
değerlerine-#infinity
taşarak gerçekleştirilir.
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, type
datetime herhangi bir type date
, type datetime
, type datetimezone
veya type time
anlamı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.
İ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
x
y
sıfır olmayan sonlu değerlerdir vez
sonucudurx + y
.x
Ve aynı büyüklüğe ancak karşıt işaretlere sahipsey
,z
pozitif sıfırdır. Hedef türünde temsil edilemeyecek kadar büyüksex + y
,z
ile aynı işaretix + y
olan 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.
İ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)
Doğrusal zaman çizelgesindeki uzaklığı tam olarak 'nin x
bü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
, DateTimeZone
veya 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şlecinin (x - y
) yorumlanması, değerlendirilen ifadelerin x
ve y
değ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, type
datetime herhangi bir type date
, type datetime
, type datetimezone
veya type time
anlamı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.
İ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
x
y
sıfır olmayan sonlu değerlerdir vez
sonucudurx - y
. vex
eşitsey
,z
pozitif sıfırdır. Hedef türünde temsil edilemeyecek kadar büyüksex - y
,z
ile aynı işaretix - y
olan 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.
İ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)
x - y
ve süre çıkarılabilir. Burada datetime herhangi bir date
, datetime
, datetimezone
veya time
anlamına gelir. Sonuçta elde edilen tarih saat, işaretinin karşısındaki yönde, tam olarak öğesinin x
büyüklüğü olan doğrusal bir zaman çizelgesinden uzaklığa y
y
sahiptir. Pozitif süreler çıkarıldığında, değerine göre x
geriye 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 saatt
ve u
bunlar arasındaki süreyi hesaplamak için kullanılarak t - u
çıkarılabilir. Burada datetime herhangi bir date
, datetime
, datetimezone
veya time
anlamına gelir. 'den çıkarılarak u
üretilen süre, öğesine t
eklendiğ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ş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.
İ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
x
vey
pozitif sonlu değerlerdir.z
, sonucunun sonucudurx * y
. Sonuç hedef türü için çok büyükse sonsuzdurz
. Sonuç hedef türüz
iç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.
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şlecinin (x / y
) yorumlanması, değerlendirilen ifadelerin x
ve y
değ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.
İ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
x
vey
pozitif sonlu değerlerdir.z
, sonucunun sonucudurx / y
. Sonuç hedef türü için çok büyükse sonsuzdurz
. Sonuç hedef türüz
iç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.
İ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
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 x
temsil eden sürediry
. Örneğin:
#duration(2,0,0,0) / 32
// #duration(0,1,30,0)
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 |
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 & y
iki değer birleştirirken aşağıdakiler tutar:
veya
x
ifadeleri değerlendirilirkeny
oluşan hatalar yayılır.Bir öğe
x
veyay
bir 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
x
ve 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ı
x
korunur ve ardından yalnızca içindey
görünen sütunlar ve göreli sıralamaları korunur. Yalnızca işlenenlerden birinde görünen sütunlar için,null
diğer işlenenin hücre değerlerini doldurmak için kullanılır.
hem hem de x & y
x
alanlarından alanlar içeren bir kayıt üreten iki kayıt kullanılarak y
birleş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 + y
iki kayıt birleştirildiğinde aşağıdakiler yer alıyor:
veya
x
ifadeleri değerlendirilirkeny
oluşan hatalar yayılır.Hem hem
x
dey
içinde bir alan görünüyorsa, içindeki değery
kullanılır.Sonuçta elde edilen kayıttaki alanların sırası, içinde yer alan ve içinde yer almayan
x
alanlarıny
içindex
gö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.
Bir tarih x
kullanılarak y
bir saatle x & y
birleştirilebilir ve hem hem de x
y
parç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 + y
iki kayıt birleştirildiğinde aşağıdakiler yer alıyor:
veya
x
ifadeleri değerlendirilirkeny
oluşan hatalar yayılır.Sonuç bir tarih saattir.
+
, -
ve not
işleçleri birli işleçlerdir.
birli ifade:
type-expression
+
birli ifade
-
birli ifade
not
birli ifade
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 +x
değerlendirilirken aşağıdakiler geçerli olur:
Değerlendirme
x
sırasında oluşan hatalar yayılır.Değerlendirmenin
x
sonucu bir sayı değeri değilse, neden koduyla"Expression.Error"
bir hata oluşur.
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 -x
değerlendirilirken aşağıdakiler geçerli olur:
Değerlendirme
x
sırasında oluşan hatalar yayılır.İfade bir sayıysa sonuç, işareti değiştirilmiş ifadedeki
x
sayı değeridir. Değer NaN ise sonuç da NaN olur.
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 x
değerlendirilirken aşağıdakiler tutar:
Değerlendirme
x
sı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.
ve is
işleçleri as
tür işleçleri olarak bilinir.
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 |
nullable-primitive-type | type logical |
ifadesix is y
, atfedilen türü true
ile x
uyumluysa döndürür y
ve atfedilen türü false
ile x
uyumsuzsa döndürüry
.
y
nullable-primitivetype olmalıdır.
is-ifadesi:
ifade olarak
is-expressionis
nullable-primitive-type
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
x
türü , türüy
any
veya null atanabilir bir türsenull
uyumludur.null
x
değilse, ilkel türüx
iley
aynıysa uyumluysa.
ifadesi x is y
değerlendirilirken aşağıdakiler geçerlidir:
- İfade
x
değerlendirilirken oluşan bir hata yayılır.
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 |
nullable-primitive-type | type any |
ifadesix as y
, işlecine göre değerin x
y
ile is
uyumlu olduğunu onaylar. Uyumlu değilse bir hata oluşur.
y
null atanabilir-ilkel-tür olmalıdır.
ifade olarak:
eşitlik-ifade
as-expressionas
nullable-primitive-type
İfade x as y
aşağıdaki gibi değerlendirilir:
Bir tür uyumluluk denetimi
x is y
gerç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 y
değerlendirilirken aşağıdakiler geçerlidir:
- İfade
x
değerlendirilirken oluşan bir hata yayılır.
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.