İşleç davranışı

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 + işleçten daha yüksek önceliğe sahip olması nedeniyle * ifade x + y * z olarak x + (y * z) 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 dizisinden 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:
      (Ifa -de)

Örnek:

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 Tanım
Birincil ı
@ı
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ı
Tekli +X Kimlik
-X Olumsuzlama
notX 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 Not equal
Tür onayı xasy Uyumlu null atanabilir ilkel tür veya hata
Tür uyumluluğu xisy Uyumlu null atanabilir ilkel tür olup olmadığını 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. Örnek:

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:
      Ifa -de

item-access-expressionx{y} şunu döndürür:

  • Bir liste x ve sayı yiçin, konumundaki yliste x öğ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ı yiçin, konumundaki ytablo x 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ıt yiçin, karşılık gelen tablo-sütun x adlarıyla eşleşen alan adlarına sahip alanlar için kaydın y alan değerleriyle eşleşen tablo satırı. Tabloda benzersiz eşleşen satır yoksa bir hata oluşur.

Örnek:

{"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 xkonum (veya eşleşme) y olmadığında döndüren null formunu x{y}?da destekler. için ybirden çok eşleşme varsa, yine de bir hata oluşur.

Örnek:

{"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. Örnek:

{ 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 veya y yayılan hatalar.

  • İfade x bir liste veya tablo değeri oluşturur.

  • İfade y bir sayı değeri veya tablo değeri üretirse x bir kayıt değeri oluşturur.

  • Sayı değeri üretirse y ve değeri y negatifse, neden koduyla "Expression.Error" bir hata oluşur.

  • Bir sayı değeri üretirse ve değeri değerinden xbüyük veya değerine eşitsey, isteğe bağlı işleç formu x{y}? kullanılmadığı sürece neden koduyla "Expression.Error" bir hata oluşur ve bu durumda değer null döndürülür.y

  • Tablo değeri üretirse ve y bir kayıt değeri üretirse x ve içinde xiçin y eşleşme yoksa, isteğe bağlı işleç formu x{y}? kullanılmadığı sürece neden koduyla "Expression.Error" ilgili bir hata oluşur ve bu durumda değer null döndürülür.

  • Bir tablo değeri üretir ve y bir kayıt değeri üretirse x ve içinde xiçin y 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ş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.

Örnek:

[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 (, , y2...tarafından seçiliry1) projeler. Seçili alan yoksa bir hata oluşur. işlecix[[y1],[y2],...], kaydı , , y2...tarafından seçilen y1alanlarla yeni bir kayda projeler; bunun yerine bir alan eksikse null kullanılır. Örnek:

[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 kısa başvuru 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. Örnek:

[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 yykalıcı olarak ilişkilendirilir ve sonra yayılır. Alana y 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çinde xbulunmayan bir alanı adlandırıyorsa, isteğe bağlı işleç formu ...? kullanılmadığı sürece neden koduyla "Expression.Error" bir hata oluşur ve bu durumda değer null döndürülür.

alan erişimi işlemi sırasında tarafından y adlandırılan dışında hiçbir alan x değerlendirilmez.

Meta veri işleci

Bir değerin meta veri kaydı meta işleci (x meta y) kullanılarak değiştirilir.

meta veri-ifadesi:
      birli ifade
      birli ifade
metabirli 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 y ifadeleri değerlendirilirken x 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 ybirleştirilen meta veri kaydıdırx. (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 İş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

Örnek:

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. Örnek:

(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 y ifadeleri değerlendirilirken x oluşan hatalar yayılır.

  • işleci = , değerlerin true eşit olup olmadığını ve false aksi takdirde sonucunu verir.

  • işleci <> , değerlerin false eşit olup olmadığını ve true aksi takdirde sonucunu verir.

  • Meta veri kayıtları karşılaştırmaya dahil değildir.

  • ve y ifadeleri değerlendirilerek x üretilen değerler aynı değer türü değilse, değerler eşit değildir.

  • ve y ifadesi değerlendirilerek x ü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 truefalse yalnızca kendilerine eşittir. Örnek:
    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.

      Örnek:

        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.

      Örnek:

        {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.

      Örnek:

        [ 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.

      Örnek:

        #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 olarak adlandırılır.>=<=><

ilişkisel ifade:
      additive-expression
      ekleme-ifadesi
<ilişkisel-ifade
      ekleme-ifadesi
>ilişkisel-ifade
      additive-expression
<= _relational-expression
      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:

Operasyon Sonuç
x < y truedeğerinden yküçüksex, false değilse
x > y truedeğerinden ybüyüksex, 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

Örnek:

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 y işlenen ifadeleri değerlendirilirken x oluşan hatalar yayılır.

  • hem hem y de x 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 nullolmalıdır. Aksi takdirde, neden koduyla "Expression.Error" bir hata oluşur.

  • İşlenenlerden nullbiri veya her ikisi de ise, sonuç değerdir null .

  • İ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ük falseolarak kabul edilen iki mantıksal karşılaştırılır.

  • ve iki sayı xy 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 -#infinitydeğere eşittir.

      • Bir #infinity değ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-ifade
ormantıksal-veya-ifadesi
mantıksal ve ifade:
      is-ifadesi
      is-expression
andlogical-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 y ifadeleri değerlendirilirken x oluşan hatalar yayılır.

  • Koşullu mantıksal işleçler ve nulltürleri logical ü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 yifadesindex, ifade y yalnızca ve olarak değerlendirilmezse x değerlendirilirtrue.

  • ve yifadesindex, ifade y yalnızca ve olarak değerlendirilmezse x 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

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 Semantiği
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ş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
typeDatetime type duration typeDatetime Süreye göre tarih saat uzaklığı
type duration typeDatetime typeDatetime
typeDatetime null null
null typeDatetime 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.

Örnek:

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 xy sıfır olmayan sonlu değerlerdir ve z sonucudur x + y. y Ve aynı büyüklüğe ancak karşıt işaretlere sahipsex, z pozitif sıfırdır. Hedef türünde temsil edilemeyecek kadar büyükse x + y , z ile aynı işareti x + 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. Örnek:

#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ığı x tam olarak 'nin ybüyüklüğü olan yeni bir tarih saat 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
typeDatetime typeDatetime type duration Tarih saatleri arasındaki süre
typeDatetime type duration typeDatetime Devredilen süreye göre tarih saat uzaklığı
typeDatetime null null
null typeDatetime 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. Örnek:

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 xy sıfır olmayan sonlu değerlerdir ve z sonucudur x - y. ve y eşitsex, z pozitif sıfırdır. Hedef türünde temsil edilemeyecek kadar büyükse x - y , z ile aynı işareti x - 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. Örnek:

#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ığı

Yeni bir tarih saat hesaplamak için kullanılarak x - y bir tarih saatx ve süre y çı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 ybüyüklüğü olan doğrusal bir zaman çizelgesinden uzaklığa xysahiptir. 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 ueklendiğinde verilmelidirt.t

#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 u > t çıkarmat - u:

#time(01,30,00) - #time(08,00,00) 
// #duration(0, -6, -30, 0)

kullanarak t - uiki tarih saat çı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. Örnek:

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 ve y pozitif sonlu değerlerdir. z , sonucunun sonucudur x * y. Sonuç hedef türü için çok büyükse sonsuzdur z . 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.

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. Örnek:

#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 duration 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. Örnek:

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 ve y pozitif sonlu değerlerdir. z , sonucunun sonucudur x / y. Sonuç hedef türü için çok büyükse sonsuzdur z . 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.

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. Örnek:

#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 ytemsil eden süredirx. Örnek:

#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 y ifadeleri değerlendirilirken x oluşan hatalar yayılır.

  • Bir öğe x veya y 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 listedir y.

  • İ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çinde ygö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.

Adres Mektup Birleştirme

Kayıt birleştirme

hem hem de xyalanlarından alanlar içeren bir kayıt üreten iki kayıt kullanılarak x & 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 y ifadeleri değerlendirilirken x oluşan hatalar yayılır.

  • Hem hem yde x içinde bir alan görünüyorsa, içindeki değer y kullanılır.

  • Sonuçta elde edilen kayıttaki alanların sırası, içinde yer alan ve içinde yer almayan xalanların y içinde ygöründükleri sırayla olmasıdırx.

  • 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 x & ybir saatle 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 y ifadeleri değerlendirilirken x oluş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
      notbirli 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. Örnek:

+ - 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 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

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. Örnek:

- (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 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

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. Örnek:

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 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 ise true, sonuç olur false. İşlenen ise false, sonuç olur true.

Sonuç mantıksal bir değerdir.

Tür işleçleri

ve as işleçleri is 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 nullable-primitive-type type logical

ifadesix is y, atfedilen türü x ile yuyumluysa döndürür true ve atfedilen türü x ile yuyumsuzsa döndürürfalse. ynullable-primitivetype olmalıdır.

is-ifadesi:
      ifade olarak
      is-expression
isnullable-primitive-type
nullable-primitive-type:

      nullableilkel 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ü anynullveya null atanabilir bir türse y uyumludur.

  • null x değilse, ilkel türü x ile yaynıysa uyumluysa.

ifadesi x is ydeğerlendirilirken aşağıdakiler geçerlidir:

  • İfade x değ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 nullable-primitive-type type any

ifadesix as y, işlecine göre değerin xis ile y uyumlu olduğunu onaylar. Uyumlu değilse bir hata oluşur. ynull atanabilir-ilkel-tür olmalıdır.

ifade olarak:
      eşitlik-ifade
      as-expression
asnullable-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öner x .

  • 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 x değ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.