{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Pacotes de software\n",
"\n",
"Pacotes de software estendem as funções e comandos básicos da linguagem.\n",
"O ecosistema da Julia contém mais de 7400 pacotes de software registrados e esse número continua crescendo.\n",
"Com um número tão grande de pacotes, pode ser difícil encontrar o pacote desejado.\n",
"Alguns serviços para ajudar a navegar nesse ecosistema são mencionados em https://julialang.org/packages.\n",
"Em particular, podemos procurar pacotes de software usando https://juliahub.com/ui/Packages.\n",
"\n",
"Além dos pacotes de software, a Julia possui comandos robustos para evocar funções de outras linguagems e interagir com elas.\n",
"Por exemplo, é simples chamar funções do Python ou do R usando os comandos `PyCall` ou `Rcall`.\n",
"Dessa forma, você pode usar pacotes de outras linguagems em seus programas em Julia.\n",
"\n",
"Vejamos agora como usar um pacote de software. A primeira vez que você usa um pacote em uma instalação da Julia, você precisa usar o gerenciador de pacotes para instalá-lo:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[32m\u001b[1m Updating\u001b[22m\u001b[39m registry at `~/.julia/registries/General.toml`\n",
"\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n",
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/julia-breve-intro/Project.toml`\n",
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/julia-breve-intro/Manifest.toml`\n"
]
}
],
"source": [
"using Pkg\n",
"Pkg.add(\"Example\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Para carregar um pacote em uma sessão da Julia, usa-se a palavra-chave `using`.\n",
"No comando acima, carregamos o pacote `Pkg` e depois usamos a função `add` do pacote `Pkg` para instalar o pacote `Example`.\n",
"\n",
"A seguir, carregamos o pacote `Example`:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"using Example"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"No código fonte de `Example.jl` em https://github.com/JuliaLang/Example.jl/blob/master/src/Example.jl, encontramos a declaração da função\n",
"```\n",
"hello(who::String) = \"Hello, $who\"\n",
"```\n",
"Logo, após carregarmos o pacote `Example`, podemos executar a função `hello`:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"\"Hello, Julia\""
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hello(\"Julia\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Agora, vamos explorar o pacote `Colors`."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n",
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/julia-breve-intro/Project.toml`\n",
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/julia-breve-intro/Manifest.toml`\n"
]
}
],
"source": [
"Pkg.add(\"Colors\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"using Colors"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vamos criar uma paleta com 100 cores diferentes."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n",
""
],
"text/plain": [
"100-element Array{RGB{N0f8},1} with eltype RGB{FixedPointNumbers.N0f8}:\n",
" RGB{N0f8}(0.0,0.0,0.0)\n",
" RGB{N0f8}(1.0,1.0,0.455)\n",
" RGB{N0f8}(1.0,0.608,1.0)\n",
" RGB{N0f8}(0.0,0.827,1.0)\n",
" RGB{N0f8}(0.886,0.388,0.051)\n",
" RGB{N0f8}(0.0,0.494,0.0)\n",
" RGB{N0f8}(0.0,0.314,0.902)\n",
" RGB{N0f8}(0.675,0.0,0.278)\n",
" RGB{N0f8}(0.0,1.0,0.784)\n",
" RGB{N0f8}(0.0,0.392,0.408)\n",
" RGB{N0f8}(1.0,0.835,0.769)\n",
" RGB{N0f8}(0.424,0.322,0.0)\n",
" RGB{N0f8}(0.478,0.459,0.506)\n",
" ⋮\n",
" RGB{N0f8}(0.0,0.557,0.58)\n",
" RGB{N0f8}(0.792,0.675,0.318)\n",
" RGB{N0f8}(0.471,0.482,0.231)\n",
" RGB{N0f8}(0.714,0.976,0.851)\n",
" RGB{N0f8}(0.855,0.0,0.247)\n",
" RGB{N0f8}(0.18,0.129,0.141)\n",
" RGB{N0f8}(0.0,0.345,0.082)\n",
" RGB{N0f8}(1.0,0.557,0.114)\n",
" RGB{N0f8}(0.4,0.455,0.694)\n",
" RGB{N0f8}(0.0,0.804,0.678)\n",
" RGB{N0f8}(0.0,0.498,0.388)\n",
" RGB{N0f8}(0.6,0.435,0.239)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"paleta = distinguishable_colors(100)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Usando o comando `rand`, vamos criar uma matrix de cores 3x3."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Uma matrix 3x3 de números aleatorios entre 0 e 1:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3×3 Matrix{Float64}:\n",
" 0.351109 0.614968 0.607372\n",
" 0.826391 0.344926 0.768653\n",
" 0.346904 0.709069 0.496766"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rand(3, 3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Uma matrix 3x3 de números aleatórios em `1:10`:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3×3 Matrix{Int64}:\n",
" 3 5 5\n",
" 4 9 4\n",
" 9 2 7"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rand(1:10, 3, 3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Uma matrix 3x3 de cores aleatórias em `paleta`:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n",
""
],
"text/plain": [
"3×3 Array{RGB{N0f8},2} with eltype RGB{FixedPointNumbers.N0f8}:\n",
" RGB{N0f8}(0.267,0.267,0.224) … RGB{N0f8}(0.0,0.196,0.0)\n",
" RGB{N0f8}(1.0,0.608,0.69) RGB{N0f8}(0.655,0.525,0.0)\n",
" RGB{N0f8}(0.0,0.176,0.188) RGB{N0f8}(0.0,0.561,0.714)"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rand(paleta, 3, 3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nos comandos acima usando `rand` , o primeiro faz a seleção entre os números float de 0 a 1, o segundo entre os inteiros de 1 a 10, e o terceiro entre os elementos da paleta."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Procurando por `Colors` em https://juliahub.com/ui/Packages encontramos informações sobre esse pacote, incluindo links para a documentação e código fonte."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 1.8.2",
"language": "julia",
"name": "julia-1.8"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.8.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}