通過代數,數字,歐幾裡得平面和分形討論JavaScript中的函數式編程

来源:https://www.cnblogs.com/langda/archive/2019/07/20/11219541.html
-Advertisement-
Play Games

本文是對函數式編程範式的系列文章從而拉開了與以下延續一個。 介紹 在JavaScript中,函數只是對象。因此,可以構造函數,作為參數傳遞,從函數返回或分配給變數。因此,JavaScript具有一流的功能。更準確地說,JavaScript支持以下內容: 高階函數參數 產生高階函數 嵌套函數 匿名功能 ...


本文是對函數式編程範式的系列文章從而拉開了與以下延續一個

用於JavaScript中的函數編程的圖1

介紹

在JavaScript中,函數只是對象。因此,可以構造函數,作為參數傳遞,從函數返回或分配給變數。因此,JavaScript具有一流的功能更準確地說,JavaScript支持以下內容:

  • 高階函數參數
  • 產生高階函數
  • 嵌套函數
  • 匿名功能
  • 關閉
  • 部分申請(ECMAScript 5

通過函數表示數據

我們S是任何元素的集合abc...(例如,桌子上的書本或歐幾裡得平面的點),並讓S'是這些元素的任意子集(例如,桌子上的書本綠色或點半徑1的圓心以歐幾里德平面的原點為中心)。

所述特征函數 S'(x)的一組S'是其中任一相關聯的功能truefalse與每個元件xS

S'(x) = true if x is in S'
S'(x) = false if x is not in S'

讓我們S成為桌子上的一套書,讓我們S'成為桌上的綠色書籍。ab是兩個綠色的書,讓cd是在表中的兩個紅本本。然後:

S'(a) = S'(b) = true
S'(c) = S'(d) = false

S是集的歐幾里德平面中的點,並且讓S'在半徑為1的在歐幾裡得平面(0,0)的原點為中心的圓的組的點的(單位圓)ab在單位圓的兩點,並讓c並且d是在歐幾裡得平面的原點為中心的半徑2的圓的兩點。然後:

S'(a) = S'(b) = true
S'(c) = S'(d) = false

因此,任何集合S'總是可以由其特征函數表示一個函數,它將一個元素作為參數,true如果該元素在S'false返回否則返回換句話說,可以通過JavaScript中的函數表示集合(抽象數據類型)。

function set() { } 

在接下來的部分中,我們將看到如何通過JavaScript以函數方式表示集合代數中的一些基本集合,然後我們將在集合上定義泛型二進位運算。然後,我們將在歐幾里德平面的子集上對數字應用這些操作。集合是抽象數據結構,數字的子集和歐幾裡得平面的子集是抽象數據結構的表示,最後二元操作是適用於抽象數據結構的任何表示的通用邏輯。

JavaScript環境

要運行網站源碼,您需要一個JavaScript引擎。有很多JavaScript引擎可用。在本節中,我將逐步介紹如何使用Ubuntu 16.04中的V8 JavaScript引擎來設置JavaScript環境。V8是一個用C ++編寫的開源JavaScript引擎,用於谷歌Chrome,Node.js和V8.NET設置也可以在Windows和macOS上完成。

  1. 獲取V8源代碼並編譯它:

    我通過在終端中運行以下命令,在Ubuntu 16.04上成功安裝並執行了d8。

    sudo apt-get install git
    mkdir ~/js 
    cd ~/js
    git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git depot_tools
    export PATH=~/js/depot_tools:"$PATH"
    fetch v8
    cd v8
    make native
    ~/js/v8/out/native/d8

    從git存儲庫下載V8源代碼需要一些時間,具體取決於Internet連接速度。編譯V8源代碼也需要一些時間,具體取決於硬體配置,但在等待必要的時間後,一切正常。

  2. 我們可以編寫第一個JavaScript代碼:

    用於JavaScript中的函數編程的圖像2

    要在控制臺中載入JavaScript文件,可以按如下方式執行:

    load('set.numbers.demo.js')

本節通過JavaScript介紹集合代數中一些基本集的表示。

空集

用於JavaScript中的函數編程的圖3

E是空集和Empty它的特色功能在集合的代數中,E是沒有元素的唯一集合。因此,Empty可以定義如下:

Empty(x) = false if x is in E
Empty(x) = false if x is not in E

因此,EJavaScript中的表示可以定義如下:

empty = function() {return function(){return false}}

在集合的代數中,Empty表示如下:

用於JavaScript中的函數編程的圖4

因此,運行以下代碼:

print('\nEmpty set:')
print('Is 7 in {}? ' + empty()(7))

給出以下結果:

用於JavaScript中的函數編程的圖5

全部設定

用於JavaScript中的函數編程的圖6

我們S是一組和S'是的子集S,它包含所有要素,All特色功能在集合的代數中,S'是包含所有元素的完整集合。因此,All可以這樣定義:

All(x) = true if x is in S

因此,S'JavaScript中的表示可以定義如下:

all = function() {return function(){return true}}

在集合的代數中,All表示如下:

圖7用於JavaScript中的函數編程

因此,運行以下代碼:

print('\nSet All:')
print('Is 7 in integers set? ' + all()(7))

給出以下結果:

用於JavaScript中的函數編程的圖8

單身套裝

我們E是辛格爾頓集和Singleton它的特色功能在集合的代數中,E也稱為單位集合,或者1元組是具有恰好一個元素的集合e因此,Singleton可以定義如下:

Singleton(x) = true if x is e
Singleton(x) = false if x is not e

因此,EJavaScript中的表示可以定義如下:

singleton = function(x) {return function(y){return x === y}}

因此,運行以下代碼:

print('\nSingleton set:')
print('Is 7 in the singleton set {0}? ' + singleton(0)(7))
print('Is 7 in the singleton set {7}? ' + singleton(7)(7))

給出以下結果:

圖9用於JavaScript中的函數編程

其他套裝

本節介紹整數集的子集。

偶數

我們E是一組連號,並且Even它的特色功能在數學中,偶數是一個2的倍數。因此,Even可以定義如下:

Even(x) = true if x is a multiple of 2
Even(x) = false if x is not a multiple of 2

因此,EJavaScript中的表示可以定義如下:

even = function(x){return x%2 === 0}

因此,運行以下代碼:

print('\nEven numbers set:')
print('Is 99 in even numbers set? ' + even(99))
print('Is 998 in even numbers set? ' + even(998))

給出以下結果:

用於JavaScript中的函數編程的圖10

奇數

我們E是一組奇數的和Odd它的特色功能在數學中,奇數是一個不是2的倍數的數字。因此,Odd可以定義如下:

Odd(x) = true if x is not a multiple of 2
Odd(x) = false if x is a multiple of 2

因此,EJavaScript中的表示可以定義如下:

odd = function(x){return x%2 === 1}

因此,運行以下代碼:

print('\nOdd numbers set:')
print('Is 99 in odd numbers set? ' + odd(99))
print('Is 998 in odd numbers set? ' + odd(998))

給出以下結果:

圖11用於JavaScript中的函數編程

倍數為3

我們E是一組3的倍數和MultipleOfThree它的特色功能在數學中,3的倍數是可被3整除的數。因此,MultipleOfThree可以定義如下:

MultipleOfThree(x) = true if x is divisible by 3
MultipleOfThree(x) = false if x is not divisible by 3

因此,EJavaScript中的表示可以定義如下:

multipleOfThree = function(x){return x%3 === 0}

因此,運行以下代碼:

print('\nMultiples of 3 set:')
print('Is 99 in multiples of 3 set? ' + multipleOfThree(99))
print('Is 998 in multiples of 3 set? ' + multipleOfThree(998))

給出以下結果:

用於JavaScript中的函數編程的圖12

倍數為5

我們E是集合5的倍數和MultipleOfFive它的特色功能在數學中,5的倍數是可被5整除的數。因此,MultipleOfFive可以定義如下:

MultipleOfFive(x) = true if x is divisible by 5
MultipleOfFive(x) = false if x is not divisible by 5

因此,EJavaScript中的表示可以定義如下:

multipleOfFive = function(x){return x%5 === 0}

因此,運行以下代碼:

print('\nMultiples of 5 set:')
print('Is 15 in multiples of 5 set? ' + multipleOfFive(15))
print('Is 998 in multiples of 5 set? ' + multipleOfFive(998))

給出以下結果:

用於JavaScript中的函數編程的圖13

質數

很久以前,當我玩Project Euler問題時,我不得不解決以下問題:

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, 
we can see that the 6th prime is 13.
What is the 10 001st prime number?

為瞭解決這個問題,我首先必須編寫一個快速演算法來檢查給定的數字是否為素數。編寫演算法後,我編寫了一個迭代演算法,迭代遍歷素數,直到找到10 001 st素數。

我們E是集合素數的和Prime它的特色功能在數學中,素數是大於1的自然數,除了1和自身之外沒有正除數。因此,Prime可以定義如下:

Prime(x) = true if x is prime
Prime(x) = false if x is not prime

因此,EJavaScript中的表示可以定義如下:

prime = function(x){
 if(x===1) return false
 if(x<4) return true
 if(x%2===0) return false
 if(x<9) return true
 if(x%3===0) return false
 var sqrt = Math.sqrt(x)
 for(var i = 5; i <= sqrt; i+=6){
  if(x%i===0) return false
  if(x%(i+2)===0) return false
 }
 return true
}

因此,運行下麵的代碼來解決我們的問題:

print('\nPrimes set:')
print('Is 2 in primes set? ' + prime(2))
print('Is 4 in primes set? ' + prime(4))
print('The 10 001st prime number is ' + getPrime(10001))

其中getPrime定義如下:

getPrime = function(p){
 var count = 0;
 for(var i = 1; ; i++){
   if(prime(i)) count++
   if(count === p){
     return i
     break
   }
 }
}

給出以下結果:

圖14用於JavaScript中的函數編程

二元操作

本節介紹了從給定集合和操作集合構造新集合的幾個基本操作。下麵是集合代數中維恩圖

用於JavaScript中的函數編程的圖15

聯盟

用於JavaScript中的函數編程的圖16

讓我們EF兩套。聯合EF,記為E U F是一組其是成員的所有元素EF

讓我們Union結合工會因此,Union可以在JavaScript中按如下方式實現操作:

union = function(e, f){return function(x){ return e(x) || f(x)}}

運行以下代碼:

print('\nUnion:')
print('Is 7 in the union of Even and Odd Integers Set? ' + union(even,odd)(7))

給出以下結果:

圖17用於JavaScript中的函數編程

路口

圖18用於JavaScript中的函數編程

讓我們EF兩套。交叉點EF,記為E n F是一組這兩者都是成員的所有元素的EF

讓我們Intersection進行交叉操作。因此,Intersection可以在JavaScript中按如下方式實現操作:

intersection = function(e, f){return function(x){ return e(x) && f(x)}}

運行以下代碼:

print('\nIntersection:')
multiplesOfThreeAndFive = intersection(multipleOfThree, multipleOfFive)
print('Is 15 a multiple of 3 and 5? ' + multiplesOfThreeAndFive(15))
print('Is 10 a multiple of 3 and 5? ' + multiplesOfThreeAndFive(10))

給出以下結果:

圖19用於JavaScript中的函數編程

笛卡爾積

用於JavaScript中的函數編程的圖20

讓我們EF兩套。笛卡兒積EF,由表示E × F是該組所有有序對(e, f),使得e是其成員Ef是其成員F

讓我們CartesianProduct進行笛卡爾積運算。因此,CartesianProduct可以在JavaScript中按如下方式實現操作:

cartesianProduct = function(e, f){return function(x, y){ return e(x) && f(y)}}

運行以下代碼:

print('\nCartesian Product:')
cp = cartesianProduct(multipleOfThree,multipleOfFive)
print('Is (9, 15) in MultipleOfThree x MultipleOfFive? ' + cp(9, 15))

給出以下結果:

圖21用於JavaScript中的函數編程

補語

圖22用於JavaScript中的函數編程

讓我們EF兩套。相對補FE,由表示E \ F是一組其是成員的所有元件的E但不是成員F

讓我們Complement進行相對補充操作。因此,Complement可以在JavaScript中按如下方式實現操作:

complement = function(e, f){return function(x){ return e(x) && !f(x)}}

運行以下代碼:

print('\nComplement:')
c = complement(multipleOfThree, multipleOfFive)
print('Is 15 in MultipleOfThree \\ MultipleOfFive set? '+ c(15))
print('Is 9 in MultipleOfThree \\ MultipleOfFive set? '+ c(9))

給出以下結果:

圖23用於JavaScript中的函數編程

對稱差異

圖24用於JavaScript中的函數編程

讓我們EF兩套。對稱差EF,記為E delta F是一組其是的任成員的所有元素的EF,但不是在相交EF

讓我們SymmetricDifference進行對稱差分運算。因此,SymmetricDifference可以在JavaScript中以兩種方式實現操作。一個簡單的方法是使用union和補充操作如下:

symmetricDifferenceWithoutXor = function(e, f){ return function(x)
                                { return union(complement(e,f), complement(f, e))(x)}}

另一種方法是使用XOR二進位操作如下:

symmetricDifferenceWithXor = function(e, f){return function(x)
                             { return (e(x) ^ f(x)) === 1 ? true : false}}

運行以下代碼:

print('\nSymmetricDifference without XOR:')
sdWithoutXor = symmetricDifferenceWithoutXor(prime, even)
print('Is 2 in the symetric difference of prime and even Sets? ' + sdWithoutXor(2))
print('Is 4 in the symetric difference of prime and even Sets? ' + sdWithoutXor(4))
print('Is 7 in the symetric difference of prime and even Sets? ' + sdWithoutXor(7))

print('\nSymmetricDifference with XOR:')
sdWithXor = symmetricDifferenceWithXor(prime, even)
print('Is 2 in the symetric difference of prime and even Sets? ', sdWithXor(2))
print('Is 4 in the symetric difference of prime and even Sets? ', sdWithXor(4))
print('Is 7 in the symetric difference of prime and even Sets? ', sdWithXor(7))

給出以下結果:

圖25用於JavaScript中的函數編程

其他行動

本節介紹集合上其他有用的二進位操作。

包含

Contains是檢查元素是否在集合中的操作。此操作是一個函數,它將元素作為參數,true如果元素在集合中則返回false否則返回。

因此,此操作在JavaScript中定義如下:

contains = function(e, x){return e(x)}

因此,運行以下代碼:

print('\nContains:')
print('Is 7 in the singleton {0}? ' + contains(singleton(0), 7))
print('Is 7 in the singleton {7}? ' + contains(singleton(7), 7))

給出以下結果:

圖26用於JavaScript中的函數編程

讓我們Add將一個元素添加到集合中的操作。此操作是一個函數,它將元素作為參數並將其添加到集合中。

因此,此操作在JavaScript中定義如下:

add = function(e, y){return function(x){ return x === y || e(x)}}

因此,運行以下代碼:

print('\nAdd:')
print('Is 7 in {0, 7}? ' + add(singleton(0),7)(7))
print('Is 0 in {1, 0}? ' + add(singleton(1),0)(0))
print('Is 7 in {19, 0}? ' + add(singleton(19),0)(7))

給出以下結果:

圖27用於JavaScript中的函數編程

去掉

Remove是從集合中刪除元素的操作。此操作是一個函數,它將元素作為參數並將其從集合中刪除。

因此,此操作在JavaScript中定義如下:

remove = function(e, y){return function(x){ return x !== y && e(x)}}

因此,運行以下代碼:

print('\nRemove:')
print('Is 7 in {}? ' + remove(singleton(0), 0)(7))
print('Is 0 in {}? ' + remove(singleton(7), 7)(0))

給出以下結果:

圖28用於JavaScript中的函數編程

對於那些想要更進一步的人

您可以通過函數式編程看到我們可以輕鬆地在JavaScript中使用集合代數。在前面的部分中,顯示了最基本的定義。但是,如果你想進一步,你可以考慮:

  • 關係集
  • 抽象代數,如么半群,群,場,環,K-矢量空間等
  • 包含 - 排除原則
  • 羅素的悖論
  • 康托爾的悖論
  • 雙向量空間
  • 定理和推論

歐幾裡得飛機

在上一節中,集合的基本概念是在JavaScript中實現的。在本節中,我們將練習在平面點集(歐幾里德平面)上實現的概念

繪製磁碟

圖29用於JavaScript中的函數編程

磁碟是由圓圈限定的平面的子集。有兩種類型的磁碟。封閉的磁碟是包含構成其邊界的圓的點的磁碟,而打開的磁碟是不包含構成其邊界的圓的點的磁碟。

在本節中,我們將成立Characterstic功能的的封閉盤和HTML5繪製。

要設置Charactertic函數,首先需要一個計算平面中兩點之間歐氏距離的函數該功能實現如下:

function distance(p1, p2){
 return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2))
}

其中point定義如下:

point = function(x,y){
 this.x = x
 this.y = y
}

這個公式是基於畢達哥拉斯定理。

圖30用於JavaScript中的函數編程

其中c歐幾里德距離(p1.X - p2.X)²(p1.Y - p2.Y)²

我們Disk特色功能的封閉盤。在集合的代數中,實數集中的閉合磁碟的定義如下:

用於JavaScript中的函數編程的圖31

其中ab是中心和R半徑的坐標

因此,DiskJavaScript中的實現如下:

disk = function(center, radius){return function(p){ return distance(p, center) <= radius}}

為了查看集合,我決定實現一個draw歐幾裡得平面中繪製集合的函數我選擇了HTML5,因此使用了canvas元素進行繪製。

因此,我通過該方法建立了下麵說明歐幾里德平面draw

用於JavaScript中的函數編程的圖像32

下麵是飛機的實施。

/*
 * Plane
 *
*/
plane = function(width, height) {

 /**
  * Plane width in pixels
  *
 */
 this.width = width

 /**
  * Plane height in pixels
  *
 */
 this.height = height

 /*
  * Draws a generic set
  *
 */
 this.draw = function (set, canvasId){
  var canvas = document.getElementById(canvasId)
  canvas.width = this.width
  canvas.height = this.height
  var context = canvas.getContext('2d'), 
  semiWidth = this.width/2, semiHeight = this.height/2, 
  xMin = -semiWidth, xMax = semiWidth,
  yMin = -semiHeight, yMax = semiHeight
  for(var x = 0; x < this.width; x++){
   var xp = xMin + x * (xMax - xMin) / this.width
   for(var y = 0; y < this.height; y++) {
     var yp = yMax - y * (yMax - yMin) / this.height
     if(set(new point(xp, yp))) context.fillRect(x, y, 1, 1)
    }
   }
  }
}

在該draw方法中,創建canvas具有與歐幾里德平面容器相同的寬度和相同高度的a 然後(x,y)canvas如果屬於的是黑點,則每個像素點都被替換為黑點setxMinxMaxyMinyMax 是在的圖中所示的邊界值歐幾裡得平面的上方。

運行以下代碼:

euclideanPlane = new plane(200, 200)
euclideanPlane.draw(disk(new point(0, 0), 50), 'disk')

這裡diskid帆布:

<canvas id="disk">Your browser does not support HTML5 canvas.</canvas>

給出以下結果:

圖34用於JavaScript中的函數編程

繪製水平和垂直半平面

水平垂直半平面或者是兩個子集到其中的平面將歐幾里德空間。水平半平面或者是兩個子集到其中的平面垂直通過與所述的線劃分的歐幾裡得空間的Y軸如上面的圖中。垂直半平面或者是兩個子集到其中的平面通過管線垂直與劃分歐幾裡得空間的X軸

在本節中,我們將設置水平垂直半平面特征函數在HTML5中繪製它們,看看如果我們將它們與磁碟子集組合,我們可以做些什麼

我們HorizontalHalfPlane特色功能一的水平半平面。HorizontalHalfPlaneJavaScript中的實現如下:

horizontalHalfPlane = function(y, isLowerThan){return function(p) 
                      { return isLowerThan ? p.y <= y : p.y >= y}}

因此,運行以下代碼:

euclideanPlane.draw(horizontalHalfPlane(0, true), 'hhp')

這裡hhpid帆布:

<canvas id="hhp">Your browser does not support HTML5 canvas.</canvas>

給出以下結果:

圖35用於JavaScript中的函數編程

我們VerticalHalfPlane特色功能一的垂直半平面。VerticalHalfPlaneJavaScript中的實現如下:

verticalHalfPlane = function(x, isLowerThan){return function(p) { return isLowerThan ? p.x <= x : p.x >= x}}

因此,運行以下代碼:

euclideanPlane.draw(verticalHalfPlane(0, false), 'vhp')

這裡vhpid帆布

<canvas id="vhd">Your browser does not support HTML5 canvas.</canvas>

給出以下源碼結果:

圖36用於JavaScript中的函數編程

在本文的第一部分中,我們在集合上設置了基本的二進位操作。因此,通過組合a disk和a 的交集half-plane,我們可以繪製半盤子集。

因此,運行以下示例:

euclideanPlane.draw(intersection(disk(new point(0, 0), 50), verticalHalfPlane(0, false)), 'hd')

這裡hdid帆布:

<canvas id="hd">Your browser does not support HTML5 canvas.</canvas>

給出以下結果:

圖37用於JavaScript中的函數編程

功能

本節介紹歐幾里德平面上的集合的函數。

翻譯

圖38用於JavaScript中的函數編程

我們translatePoint是翻譯在平面上的點的功能。在歐幾里德幾何中,translatePoint是一個將給定點在指定方向上移動恆定距離的函數。因此,JavaScript中的實現如下:

translatePoint = function(deltax, deltay){return function(p)
                 { return new point(p.x + deltax, p.y + deltay)}}

其中(deltax, deltay)是翻譯的常量向量。

我們translate是轉化平面中的設定功能。這個函數在JavaScript中簡單地實現如下:

translate = function(e, deltax, deltay){return function(p)
            { return e(translatePoint(-deltax, -deltay)(p))}}

translatedeltax第一歐幾里德維度中的delta距離作為參數,其是deltay第二歐幾里德維度中的delta距離。如果點P(x,y)在集合S中被平移,則其坐標將變為(x',y')=(x + delatx,y + deltay)因此,點(X ' - delatx,Y' - DELTAY)將始終屬於集合小號在集合代數中,translate稱為同構,換句話說,所有翻譯的集合形成翻譯組T,其與空間本身同構。這解釋了該功能的主要邏輯。

因此,運行以下代碼:

var deltay = 0
setInterval(function(){
 deltay = deltay <=  euclideanPlane.height ? deltay + 20 : 0
 euclideanPlane.draw(translate(disk(new point(0, -50), 50), 0, deltay) , 'ep_op')
}, 1000)

這裡ep_opid帆布:

<canvas id="ep_op">Your browser does not support HTML5 canvas.</canvas>

給出以下結果:

圖39用於JavaScript中的函數編程

位似

圖40用於JavaScript中的函數編程

scalePoint是發送的任何點的功能中號到另一點Ñ使得段SN是在同一行作為SM,而是由一個因數縮放拉姆達在集的代數中,Scale表述如下:

用於JavaScript中的函數編程的圖41

因此,JavaScript中的實現如下:

scalePoint = function(lambdax, lambday, deltax, deltay)
    {return function(p){ return new point(lambdax * p.x + deltax, lambday * p.y + deltay)}}

其中(deltax, deltay)是平移的常數向量,(lambdax, lambday)是lambda向量。

讓我們scale在計劃中的集合上應用同一性的功能。這個函數在JavaScript中簡單地實現如下:

scale = function(e, lambdax, lambday, deltax, deltay)
        {return function(p){ return e(scalePoint(1/lambdax, 1/lambday, 
        -deltax/lambdax, -deltay/lambday)(p))}}

scaledeltax第一歐幾里德維度中的Δ距離作為參數,該第一歐幾里德維度deltay是第二歐幾里德維度中的Δ距離,並且(lambdax, lambday)是恆定因數向量λ。如果點P(x,y)scale在集合S中變換,則其坐標將變為(x',y')=(lambdax * x + delatx,lambday * y + deltay)因此,點((x'- delatx)/ lambdax,(y' - deltay)/ lambday)將始終屬於集合S,當然,如果lambda不同於向量0。在集合的代數中,scale稱為同構,換句話說,所有同態的集合形成Homothety組H,與空間本身\ {0}同構。這解釋了該功能的主要邏輯。

因此,運行以下代碼:

var deltay = 0, lambday = 0.05 
setInterval(function(){  
 deltay = deltay <=  euclideanPlane.height ? deltay + 20 : 0
 lambday = deltay <=  euclideanPlane.height ? lambday + 0.05 : 0.05
 euclideanPlane.draw(scale(disk(new point(0, -50), 50), 1, lambday, 0, deltay), 'ep_op')
}, 1000)

給出以下結果:

圖42用於JavaScript中的函數編程

旋轉

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、什麼是資料庫 1、資料庫概念:資料庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,每個資料庫都有一個或多個不同的API介面用於創建,訪問,管理,搜索和複製所保存的數據。 2、RDBMS(關係資料庫管理系統): 能讓我們使用表、列和索引實現一個資料庫 保證各種表的行間的引用完整性 ...
  • 有時,我們可能會遇到這樣的情況,當我們數據表的float類型精度不夠時,可能需要把它統一調整成decimal或者money,而這時你一個一個去修改可能會崩潰,因為你無法從幾千張表裡確實找到所有的float類型的欄位,而這時我們就需要自動的,批量的去處理它們。 實現思路:從系統表中查詢所有用戶建立的表 ...
  • 概念 redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove ...
  • 題目: 假設我們有一個ViewController, Category A(ViewController), Category B(ViewController), Category C(ViewController) 4個文件, 其中3個category中都實現了自定義viewDidLoad方法, ...
  • 各位朋友好,最近自學開發了一個手機Web APP,“編程之路”,主要功能包括文章的展示,留言,註冊登錄,音樂播放等。為了記錄學習心得,提高自己的編程水平,也許對其他朋友有點啟發,特整理開發筆記如下。 第一章基本情況 這個手機APP我已經初步成型,我放到華為應用市場,感興趣的朋友可以自行下載看看效果, ...
  • 版權聲明:本文為xing_star原創文章,轉載請註明出處! 本文同步自http://javaexception.com/archives/173 最近幾天碰到了ImageView的background,Image等問題,還花了一番精力查閱資料。今天有時間整理下,彙總下。 問題1 如何為ImageV ...
  • 前面一片文章講到過一點函數,瞭解到每聲明一個函數就會產生一個作用域。而外面的作用域訪問不了裡面的作用域(把裡面的變數和函數隱藏起來),而裡面的可以訪問到外面的。對於隱藏變數和函數是一個非常有用的技術。 基於作用域隱藏的方法叫做最小授權或最小暴露原則。 這個原則是指在軟體設計中,應該最小限度的暴露必要 ...
  • 呈現效果如下:![07003] 實現代碼如下: 實現原理其實也很簡單,相當於通過 表單向百度伺服器發送了一個 請求。參數解釋如下: 即 Word,查詢關鍵詞。必須參數。 即 Input Encoding,查詢關鍵詞的編碼。有預設值,非必須參數。 表示提交搜索請求的來源站點。有預設值,非必須參數。 [ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...