⑴ 趣味編程的三種開發方式是什麼
趣味編程的三種開發方式是函數式編程、聲明式編程、命令式編程。趣味編程是MIT(麻省理工學院)發展的一套新的程序語言,可以用來創造互動式故事、動畫、游戲、音樂和藝術。很適合8歲以上兒童使用,完全不用背指令,使用積木組合式的程序語言,讓學習變得更輕松,並充滿樂趣。
⑵ 式編程,命令式編程()和函數式編程的區別
編程語言主要有四種類型
聲明式編程:專注於」做什麼」而不是」如何去做」。在更高層面寫代碼,更關心的是目標,而不是底層演算法實現的過程。
ex: css, 正則表達式,sql 語句,html, xml…
命令式編程(過程式編程) : 專注於」如何去做」,這樣不管」做什麼」,都會按照你的命令去做。解決某一問題的具體演算法實現。
函數式編程:把運算過程盡量寫成一系列嵌套的函數調用。
函數式編程強調沒有」副作用」,意味著函數要保持獨立,所有功能就是返回一個新的值,沒有其他行為,尤其是不得修改外部變數的值。
所謂」副作用」(side effect),指的是函數內部與外部互動(最典型的情況,就是修改全局變數的值),產生運算以外的其他結果。
⑶ java支持的編程範式
Java編程範式
1.命令式編程
核心內容就是:「用語句更改程序的狀態」
大多數流行的編程語言都或多或少基於命令式編程發展而來,命令式語言最典型的實例就是C語言
2.面向對象編程
面向對象編程經常與命令式編程聯系在一起,在實踐當中,兩者是可以共存的。Java就是這種協作的生動證明
面向對象基於四個基本原則:封裝、繼承、多態、抽象
3.聲明式編程
與命令式編程相反,聲明式編程它指定程序應該做什麼,而不具體說明怎麼做。
純粹的聲明式語言包括資料庫查詢語言(如SQL和Xpath)以及正則表達式。
與命令式編程語言相比,聲明式編程語言更加抽象,它們並不模擬硬體結構,因此不會改變程序狀態,而是將它們轉換為新狀態,並且更接近數學邏輯
通常,非命令是的編程範式都被認為屬於聲明式類別。
4.函數式編程
函數式編程是聲明式編程的子範式,與命令式編程相反,函數式變成不會改變程序的內部狀態。
在函數式編程術語中,函數類似於數學函數,函數的輸出僅依賴於其參數,而不管程序的狀態如何,完全不受函數式是何時執行的影響
函數式語言受歡迎的原因之一是它們可以輕松的在並行環境中運行,這與多線程不太一樣,函數式語言支持並行的關鍵在於它們的基本原理:函數僅依賴與輸入參數而不依賴於程序的狀態。它們可以在任何地方運行,然後將多個並行執行的結果連接起來並進一步使用
⑷ 如何學好一門編程語言
學好一門編程語言是十分不容易的,但是如果學會了,它的實用性是很強的,下面我為大家整理了學好一門編程語言的辦法,大家可以參考借鑒。
一、多總結
多總結才能加深理解、增強記憶。舉例,Go 中有 slice、map、channal 類型,它們都可以用 make 生成實例,但 slice 和 map 還可以用以下形式初始化,也是編程規范中建議的初始化方式:
colors := map[string]string{}
slice := []int{}
但注意了,channal 則沒有這樣的語法:msg := chan string{}
上面兩句是生成實例,表示空集合,但下面兩句則表示實例不存在,值為 nil
var colors map[string]string
var slice []int
另外,結構體指針 slice 還可以象下面這樣初始化,結構體實例不用明確地指定類型(使用了類型推導)、不用明確地取地址運算(&)。
type Proct struct {
name string
price float64
}
procts := []*Proct{{"Spanner", 3.99}, {"Wrench", 2.49}, {"Screwdriver", 1.99}}
看到沒有,如果不經常總結,這一圈學下來會把你整的稀里糊塗的。
二、多比較
學一門新語言一定要與你之前已經熟悉的語言經常作比較,找出它們的相同與不同,這樣才能加深記憶和理解,否則學完之後腦子里會一片混亂,搞不清誰是誰非了。
就拿數組來說吧,在 Java、Scala、Go 中定義、實例化、賦值是不一樣的。
//Java
int[] arr;//定義數組,不可以指定數組長度
arr = new int[5];//創建數組對象(實例化),指定數組長度
arr[1] = 8;//賦值
//Scala
val arr = new Array[Int](5) //數組在Scala里用的是泛型類,構造函數參數指定數組大小
arr(1) = 8 //賦值,注意用的是括弧
//Go
arr := [5]int{} //創建數組,初始化5個元素都為0,注意如果不指定數組長度,則是另外一種類型Slice
arr[1] = 8 //賦值
再比如 Map 在 Scala 與 Go 語言里定義、初始化、訪問也是不同的,作了以下比較後印象會非常深刻,把它們記下來,這樣以後使用就不會搞混了。
//Scala
val capital = Map("France" -> "Paris", "Japan" -> "Tokyo")
println(capital.get("France"))
//Go
capital := map[string]string{"France": "Paris", "Japan": "Tokyo"}
fmt.Println(capital["France"])
Go 同時給多個變數賦值在 Scala 里可以用模式匹配做到,如下:
//Scala(使用樣本類的模式匹配)
case class Tao(name: String, age: Int);
val Tao(myName, myAge) = Tao("taozs", 18);
println(myName)
println(myAge)
//Go
myName, myAge := "taozs", 18
fmt.Println(myName)
fmt.Println(myAge)
//Scala(使用元組的模式匹配)
val (myNumber, myString) = (123, "abe")
println(myNumber)
println(myString)
//Go
myNumber, myString := 123, "abe"
fmt.Println(myNumber)
fmt.Println(myString)
以下是 Scala 和 Go 定義和實現函數的區別:
//Scala
val increase: Int => Int = (x: Int) => x + 1
println(increase(8))
//Go
var increase func(int) int = func(x int) int { return x + 1 }
fmt.Println(increase(8))
除了在 Scala 和 Go 里都可以類型推導外,在 Scala 里還可以這樣定義函數:
//Scala
val increase = (_: Int) + 1
為方便自己將來隨時查閱,可以建立下面這樣的對比表格,描述不一定要求規范,自己能看懂就行。
三、轉變思維方式,
學會用這門語言去思考
學會用語言去思考是關鍵。如果你以前是學 C 的,轉學 Java,你一定要改變以前面向過程的思維,學會用面向對象的思維去分析問題;以前學 Java 的,轉學 Scala 則要學會用函數式的編程思維解決問題。
舉一個函數式編程的例子,以下是 Java 語言常用的 for 循環,循環變數從 1 到 10 執行 10 次循環體:
// 命令式編程
for (int i = 1; i < 10; i++) {
// 此處是循環體做10次
}
這被稱為命令式編程 (Imperative Programming),但學了 Scala 的函數式編程 (Functional Programming) 後,解決同樣的問題,我們可以換一種思維:構建 1 到 10 的列表序列,針對列表中的`每個元素分別執行函數,如下:
//函數式編程
val autoList = (1 to 10).map(i => /*此處是函數體,針對1到10的每一個分別調用 1次*/)
已經習慣了 Java 編程的,對 Scala 的函數式編程、樣本類、模式匹配、不可變對象、隱式轉換等需要一個逐步適應的過程,要漸漸學會用它們思考和解決問題。
再舉個 Scala 與 Go 思維方式不同的例子,要實現對一個字元串里的每個字元加 1 的操作,Scala 里可以這樣:
"abc".map(cc => cc + 1)
"abc"是一個字元串對象,調用它的方法 map,這是純面向對象的思維,但在 Go 里就要轉變為面向過程的思維:
name := "abc"
second := strings.Map(func(x rune) rune {
return x + 1
}, name)
注意,這里的 strings 是包 (package),調用它的公共函數 Map,被人操作的對象 name 字元串作為函數參數傳入。Go 提供的函數 len、cap、append、 等其實都是面向過程的,雖然 Go 也提供有面向對象的支持,已經習慣了面向對象編程的,剛開始學 Go 語言需要特別留意這一點。
四、多看開源代碼
學一門語言就是學一種思維方式,如今 GitHub 上可下載的開源代碼海量級,通過看別人的代碼,學習別人是如何解決問題的,養成用該語言思考的習慣,另外還能學習到一些非常有用的技巧,比如我在看一個 Go 語言性能測試框架代碼時看到有以下寫法:
func main() {
defer profile.Start().Stop()
...
}
這個意思是指剛進入程序時執行 Start( ) 函數,程序退出前調用 Stop( ) 函數,非常好的技巧啊!可以用於需要在程序執行前和程序完成後分別執行一段邏輯的場景。再看 Start( ) 函數是怎麼實現的:
func Start(options ...func(*Profile)) interface {
Stop()
} {
...
return &prof
}
該函數返回了一個實現了含有 Stop( ) 函數介面的對象,如此才能在調用 Start 調用後連調 Stop。
五、優先學會使用代碼分析工具
代碼分析的工具包括靜態檢查、測試、測試覆蓋率分析、性能分析(內存、CPU)、調試工具等,工具的價值在於它可以有效幫我們發現代碼問題,這在我們剛開始學一門編程語言時意義尤其重大。
例如,以下這句 Java 賦值語句估計沒有哪本教科書會告訴你有性能問題:
String sb = new String(「Hello World」);
以下這段 Java 代碼你也不一定能意識到有多線程問題:
synchronized public void send(authuserPacket pkt, Thread t, String flowNo) throws IOException
{
logger.info("start");
//連接不可用,直接拋出異常,等待接收線程連接伺服器成功
if (!this.avaliable)
{
try
{
//如果連接不可用,則等待2S,然後重新檢測
Thread.sleep(2000);
}
... ...
如果我們及時用 FindBugs 工具檢查就會發現上面這些問題,進而你會去分析研究為什麼,如此,你對這門語言的了解也會越來越多。
另外,Go 語言自帶的 vet/test/cover/pprof/trace 都是非常有用的工具,一邊學一邊使用這些工具分析代碼,能加深對語言的理解。
六、多練習、多實踐
就象學自然語言一樣,如果只知道語法不去練是沒有任何效果的,只有反復地練習,慢慢才能變成自己的一項技能。書本上的例子代碼最好能從頭到尾親自敲一遍,多運行、多嘗試,另外再找一些題目來練習,如能有機會參與項目開發則更好啦,勤動手、勤實踐是最好的學習方法。
其它的方法還有:
做好筆記,把學習中遇到的關鍵點和自己的思考記下來,便於後面復習和對比;
復習,學習一定要重復、重復、再重復;
學習貴在堅持,每天學一點(比如堅持每天學 1 小時),日積月累。
⑸ 什麼是編程範式
編程範式(programming paradigm),指的是計算機編程的基本風格或典範模式。
如果每個程序員都在創造一個虛擬世界,那麼編程範式就是世界觀和方法論,他們被置於一種有意識的無意識的方式中。可以知道編程是解決問題,解決問題可以有多種觀點和想法,其中通用和有效的模式被總結為範式。
例如,編程中常用的「面向對象編程」是一種範式。由於焦點和思維方式的不同,相對的範式自然有其自身的聚焦和傾向,因此一些範式常被用來描述「oriented」。
(5)函數式編程和命令式編程擴展閱讀:
主要的編程範式有三種:命令式編程,聲明式編程和函數式編程。
1、命令式編程:
命令式編程的主要思想是關注計算機執行的步驟,即一步一步告訴計算機先做什麼再做什麼。
2、聲明式編程:
聲明式編程是以數據結構的形式來表達程序執行的邏輯。它的主要思想是告訴計算機應該做什麼,但不指定具體要怎麼做。SQL 語句就是最明顯的一種聲明式編程的例子。
3、函數式編程:
函數式編程和聲明式編程是有所關聯的,因為他們思想是一致的:即只關注做什麼而不是怎麼做。但函數式編程不僅僅局限於聲明式編程。
函數式編程最重要的特點是「函數第一位」,即函數可以出現在任何地方,比如可以把函數作為參數傳遞給另一個函數,不僅如此你還可以將函數作為返回值。
參考資料來源:網路-多重編程範式
⑹ 程序設計語言從程序設計方法來分可分為什麼
程序設計語言分為:
1、命令式語言;2、函數式語言,基於數學函數概念的值映射的λ運算元可計算模型;3、邏輯式語言,基於一組已知規則的形式邏輯系統;4、面向對象語言。
程序設計語言分為:
1、命令式語言。
這種語言的語義基礎是模擬「數據存儲/數據操作」的圖靈機可計算模型,十分符合現代計算機體系結構的自然實現方式。
其中產生操作的主要途徑是依賴語句或命令產生的副作用。現代流行的大多數語言都是這一類型,比如Fortran、Pascal、C++obol、C、C++、Basic、Ada、Java、C#等,各種腳本語言也被看作是此種類型。
2、函數式語言。
這種語言的語義基礎是基於數學函數概念的值映射的λ運算元可計算模型。這種語言非常適合於進行人工智慧等工作的計算。典型的函數式語言如Lisp、Haskell、ML、Scheme、F#等。
3、邏輯式語言。
這種語言的語義基礎是基於一組已知規則的形式邏輯系統。這種語言主要用在專家系統的實現中。最著名的邏輯式語言是Prolog。
4、面向對象語言。
現代語言中的大多數都提供面向對象的支持,但有些語言是直接建立在面向對象基本模型上的,語言的語法形式的語義就是基本對象操作。主要的純面向對象語言是Smalltalk。
雖然各種語言屬於不同的類型,但它們各自都不同程度地對其他類型的運算模式有所支持。
⑺ 函數式編程和命令式編程之間的區別
C語言是面向過程的編程,它的最重要特點是函數,通過主函數來調用一個個子函數。程序運行的順序都是程序員決定好了的。它是我學的第一種程序語言。 C++是面向對象的編程,類是它的主要特點,程序執行過程中,先由主函數進入,定義一些類,根據需