ruby語言是什麼東西

来源:http://www.cnblogs.com/dingjiaoyang/archive/2016/01/13/5128177.html
-Advertisement-
Play Games

1、簡介 Ruby是日本的Yukihiro Matsumoto寫的,簡單易學的面向對象的腳本語言,像perl一樣,有豐富的文字處理、系統管理等豐富 功能,但是ruby要簡單,容易理解和擴充。跟python很類似,但是在國內遠沒有python有名。Ruby是一種功能強大的面向對象的腳本語言,可以使用它...


1、簡介
    Ruby是日本的Yukihiro Matsumoto寫的,簡單易學的面向對象的腳本語言,像perl一樣,有豐富的文字處理、系統管理等豐富 功能,但是ruby要簡單,容易理解和擴充。跟python很類似,但是在國內遠沒有python有名。

Ruby是一種功能強大的面向對象腳本語言,可以使用它方便快捷地進行面向對象程式設計。與Perl類似,而且Ruby具有強大的文本處理功能,使文本處理變得簡單。此外還可以方便地使用C語言來擴展Ruby的功能。
若您曾經“想要一種簡單的面向對象的語言”,或者認為“Perl的功能雖然好用,但它的語法真讓人受不了”,又或者覺得“LISP系列語言的思想不錯,但到處都是括弧真讓人討厭,最起碼算式應該按照通常的樣式書寫”。那麼,Ruby或許能讓您滿意。

歸納起來,Ruby有以下優點:
 解釋型執行,方便快捷
Ruby是解釋型語言,其程式無需編譯即可執行。
 語法簡單、優雅
語法比較簡單,類似Algol系語法。
 完全面向對象
Ruby從一開始就被設計成純粹的面向對象語言,因此所有東西都是對象,例如整數等基本數據類型。
 內置正則式引擎,適合文本處理
Ruby支持功能強大的字元串操作和正則表達式檢索功能,可以方便的對字元串進行處理。
 自動垃圾收集
具有垃圾回收(Garbage Collect,GC)功能,能自動回收不再使用的對象。不需要用戶對記憶體進行管理。
 跨平臺和高度可移植性
Ruby支持多種平臺,在Windows, Unix, Linux, MacOS上都可以運行。Ruby程式的可移植性非常好,絕大多數程式可以不加修改的在各種平臺上加以運行。
 有優雅、完善的異常處理機制
Ruby提供了一整套異常處理機制,可以方便優雅地處理代碼處理出錯的情況。
 擁有很多高級特性
Ruby擁有很多高級特性,例如操作符重載、Mix-ins、特殊方法等等,是用這些特性可以方便地完成各種強大的功能。


一般認為,他有如下特點:

  • 簡單 
    解釋型語言(インタプリタ),所以不必事先編譯(コンパイル)。
    變數沒有類型的區分,雖然可以省去類型錯誤的擔憂,但也會引起編譯時候檢查的脆弱。
    變數不需要定義。
    簡單的語法,多從Eiffel繼承而來。
    不需要記憶體管理,系統提供GC(ガーベージコレクタ)處理機制。
  •  純的面向對象的語言
    一切都是對象,像整數等類型從開始就被設計為對象來處理。
    class(クラス),繼承,method(メソッド)等
    (特殊方法?)特異メソッド 
    module(モジュール)によるMixin 
    迭代(イテレータ)和閉包(クロージャ)。一個在閉包開始時定義的資源在閉包結束後會被釋放, 適合於socket,資料庫連接,文件句柄等。
  • 腳本語言
    解釋執行
    很強的文字處理能力和正則表達式
    直接訪問OS,用ruby編寫系統程式也是可能的。
  • 其他
    支持多種長整數,記憶體允許,可以進行很大數的計算操作。
    具備異常處理能力,具備java的異常處理功能。
    dynamic loading(ダイナミックローディング )。可以在運行時候重定義自己, 類也可以在運行時繼承/取消繼承。
    線程。現在的ruby已經有線程的概念,Ruby2.0好像能支持本地線程。
    反射(Reflection)。Ruby可以看到程式的內部,比如一個模塊是否含一個特定方法, 一個對象是哪個class等等。類似java。
    擴展性。C api。
    發行許可證。基於Ruby Artistic License (BSD樣式的)和GPL。

2、環境安裝

(1).安裝1.可以從www.ruby-lang.org下載源代碼進行安裝。

(2).解壓縮源文件,進入安裝目錄

#./configuremake

#make 

#install

3.使用

(1). 使用irb。irb是一個交互介面,在shell里運行它,首先顯示提示符,等待輸入;用戶輸入之後,它在進行處理,把結果顯示給用戶。

#irb 

irb(main):001:0> $str="hello world!/n" 

=> "hello world!/n" 

irb(main):002:0> print $str 

hello world! 

=> nil 

irb(main):003:0> 


(2).像其他語言一樣,從程式文件運行

[root@tserver /root]# chmod a+x foo.rb   

[root@tserver /root]# cat foo.rb

#!/usr/local/bin/ruby -w

puts "Hello, World!"

 

[root@tserver /root]# ruby foo.rb

Hello, World!

[root@tserver /root]# ./foo.rb

Hello,World!

[root@tserver /root]#

 


(3).Ruby使用方法 
ruby [ option ...] [ -- ] [ programfile ] [ argument ...]pre>

關於Ruby的命令行參數,可以參考相關文檔。

4.簡單例子

 

 def sayGoodnight(name) 
       result = "Goodnight, " + name
      return result
end

# Time for bed...
puts sayGoodnight("John-Boy")
puts sayGoodnight("Mary-Ellen")

    可以看到,ruby的語法還是比較簡單的,首先,你不必每行都寫個分號, Ruby註釋以#開頭,直到行尾。
    Methods定義以關鍵字def開始,接著是方法名和方法參數, ruby不需要用braces來界定程式主體,只需要關鍵字end就行了。
    這個程式也相當簡單,第一行把``Goodnight, ''加上參數name,並把它賦給了局部變數result,第二行把結果返回給調用者。註意我們不需要定義變數result。
    最後我們調用了2次這個方法,並把結果傳給puts函數,這個函數簡單的再新行上列印傳給它的參數而已,最後結果像這樣:

 

Goodnight, John-Boy
Goodnight, Mary-Ellen

 

      其實 puts sayGoodnight("John-Boy")  包括了2個函數調用,一個put系統函數,一個sayGoodnight函數。但是為什麼puts調用沒有用括弧呢?實際上,下麵的調用都是等價的:

 

puts(sayGoodnight "John-Boy")
puts(sayGoodnight("John-Boy"))
puts sayGoodnight("John-Boy")
puts sayGoodnight "John-Boy"


 
       但是如果都不寫括弧,你知道那個參數傳給誰嗎?所以還是建議在方法後面加上括弧,方便閱讀源程式。

    這個方法還展示了string對象,有很多種辦法可以創建string對象,但最普通的要算用string literals了:單引號或雙引號包起來的一組字元。它們的區別是ruby構建這兩種字元串時要做的操作。對單引號引起來的字元串來說,ruby做的工作會很少,單引號引起來得部分就是它的值。如果是雙引號引起來得,則要做多一些工作了。首先,它檢查是否包含反斜線,也就是轉義符,然後用適當的二進位值代替,最常見的就是"/n"了,它將會被換行替換。如:

 

puts "And Goodnight,/nGrandma"

產生結果如下: 

And Goodnight,
Grandma

    第二件事情就是expression interpolation。#{ expression }被expression的值代替,例如,下麵的方法和剛纔的例子是一樣的結果

def sayGoodnight(name)
    result = "Goodnight, #{name}"
    return result
end


    當然我們還可以再簡化這個函數。一個ruby函數返回的結果就是最後一行的值,所以這個函數也可以寫成如下:

def sayGoodnight(name)
    "Goodnight, #{name}"
end


    Ruby使用俗定的命名方式為變數命名,變數名的第一個字母標誌了它的類型,是局部變數,還是方法參數,方法名應該以小寫字母或者下劃線開頭,全局變數應該以$開頭,實例變數以@開頭, class變數以@@開頭,而類名,模塊名,常量應該以大寫字母開頭。
    一個名字可以是字母,數字,下劃線的任意組合,但是有@後面不允許直接跟著一個數字。 
    總之,作為一門語言,不是一兩個例子,幾個文章能說清楚地,在網上流傳的我愛ruby的10個原因等跟天下足球top ten類似的短文中,總會看到一個理由,就是fun with ruby。也許,更有趣的還在後面。


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

-Advertisement-
Play Games
更多相關文章
  • content屬性值 : width:可視區域的寬度,值可為數字或關鍵詞device-width height:同width intial-scale:頁面首次被顯示是可視區域的縮放級別,取值1.0則頁面按實際尺寸顯示,無任何縮放 maximum-scale=1.0, minimum-sca...
  • Modernizr是什麼? Modernizr 是一個用來檢測瀏覽器功能支持情況的 JavaScript 庫。 目前,通過檢驗瀏覽器對一系列測試的處理情況,Modernizr 可以檢測18項 CSS3 功能以及40多項關於HTML5 的功能。 它比傳統檢測瀏覽器名稱(瀏覽器嗅探)的方式更為可靠...
  • 今天我們要來分享一款基於純CSS3的自定義邊框應用,看上去它像一個Tooltip控制項,因為下邊框有一個小三角,就像很多地方的引用文本框一樣。另外這款CSS3邊框是塗鴉風格的,看起來很有個性。用CSS3實現自定義邊框的好處是可以自適應邊框內部的文字數量大小。下麵我們來分享一下實現的方法,主要由HTML...
  • jquery操作覆選框(checkbox)的12個小技巧。1、獲取單個checkbox選中項(三種寫法)$("input:checkbox:checked").val()或者$("input:[type='checkbox']:checked").val();或者$("input:[name='ck...
  • 學習是技術人員成長的基礎,本次分享20本技術方面的書籍,這些書不是每一本都是經典,但是每一本都有其特點。以下20本大部分本人看過,因此推薦給大家。包含大型網站架構系列, 分散式系統系列,BAT技術文學系列,架構設計系列。
  • GitHub日報:每天新開源的優秀項目;天碼營:部分精彩的博客和實用的經驗;張開濤springMVC博客
  • 1.C++里大寫TRUE和小寫true區別true是bool型的;TRUE是int型的,VC里這個是ms自己定義的;C++規定不允許只通過返回類型不同區別兩個函數2.MFC中的”false“和 “FALSE"有沒區別?有區別。false是bool類型的值,一個位元組大小。而FALSE是BOOL類型的值...
  • 打開文件的步驟如下:彈出打開文件對話框 -> 獲取選擇的文件,並將文件顯示在視圖中。我們程式中經常需要定製的操作如下:1. 定製彈出的文件對話框,例如需要修改打開文件的類型或擴展名2. 定製文件顯示的行為3. 定製文件打開後的行為1. CWinApp::OnFileOpen它是ID_FILE_OPE...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...